PythonでCGI書いてるんだが迷宮入りしたプログラミングweb助け
1 :
以下、名無しにかわりましてVIPがお送りします :
2014/01/19(日) 18:50:59.18 ID:dpyX/gRC0 pythonのcgiモジュールのFieldStorage()使って書いたんだが ページにアクセスすると真っ白になる CGIじゃなく直接Pythonで実行するとhtmlらしき文書が出てくる そのしたにencodingerrorが出てくる これなに助けて混乱してる
2 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 18:51:52.61 ID:MjnWB1fI0
cgiゲー面白いよね
3 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 18:52:12.99 ID:36GL0FGoP
apacheの設定じゃね?
4 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 18:52:55.06 ID:vZA8zyJ80
aspe
5 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 18:53:51.33 ID:dpyX/gRC0
6 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 18:54:58.34 ID:49VZLIWy0
お前、HTTPのヘッダ出力してないだろ?
7 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 18:55:26.67 ID:OQtRqTdL0
8 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 18:55:54.53 ID:36GL0FGoP
>>5 ファイルかディレクトリの実行権限かな? python知らねーからテキトー言ってるけど。
9 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 18:57:48.04 ID:Nj/AEiwt0
テスト用のCGIはPython?
10 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 18:58:11.57 ID:+29bVYpS0
ライブラリが足りてないんじゃね
11 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 18:59:42.73 ID:dpyX/gRC0
>>6 Print('Content-type: text/html;charset=utf-8¥n')
がプリント文の一番最初なんだがフォーマット違ったりする?
12 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:00:15.41 ID:dpyX/gRC0
¥
13 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:00:56.46 ID:dpyX/gRC0
print('Content-type: text/html;charset=utf-8\n')
14 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:04:45.24 ID:49VZLIWy0
15 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:05:26.06 ID:S8t0yzIM0
迷宮ゲームすでにしてるじゃん
16 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:06:35.09 ID:dpyX/gRC0
17 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:06:49.98 ID:Nj/AEiwt0
改行はCR LF
18 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:07:19.72 ID:igBP7UF10
改行コード\r\nじゃないか? しかもCGIの時ってヘッダ部の終了を表す空行入れないといけないから\r\n\r\nじゃね
19 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:08:55.61 ID:dpyX/gRC0
20 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:10:11.80 ID:49VZLIWy0
>>19 マジか
俺はC++とgccでcgi書いてるけどこれで問題無いけどなー
21 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:11:33.30 ID:Ko+7zrOzP
22 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:11:44.48 ID:dpyX/gRC0
23 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:12:03.68 ID:6C5IRfv1P
スタンドアローンアプリが書ける分PHPより汎用性高いよな Linuxならまず実行環境入ってるし
24 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:12:15.72 ID:DcJldohI0
ジャンゴwwwwww
25 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:12:59.25 ID:I8ookjUt0
シフトJISにしてみ
26 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:13:44.38 ID:dpyX/gRC0
大事なこと忘れてた Python3な
27 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:15:40.49 ID:dpyX/gRC0
28 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:15:42.27 ID:49VZLIWy0
httpサーバーのエラーログには何も残ってないの?
29 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:15:48.42 ID:DcJldohI0
chmod 755 *(確信)
30 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:18:13.48 ID:dpyX/gRC0
31 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:25:43.22 ID:dpyX/gRC0
>>28 [Sun Jan 19 19:19:40 2014] [error] [client ●●●.●●●.●.●●●] Traceback
(most recent call last):
[Sun Jan 19 19:19:40 2014] [error] [client ●●●.●●●.●.●●●] File
"/var/www/cgi-bin/●●●●.py", line 36, in <module>
[Sun Jan 19 19:19:40 2014] [error] [client ●●●.●●●.●.●●●]
print(html_body.format(content))
[Sun Jan 19 19:19:40 2014] [error] [client ●●●.●●●.●.●●●]
UnicodeEncodeError: 'ascii' codec can't encode characters in position
96-106: ordinal not in range(128)
32 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:32:25.05 ID:Ko+7zrOzP
ちなみにPythonのバージョンいくつよ
33 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:34:16.30 ID:49VZLIWy0
>>31 utf8でContent-type: text/htmlを出力しようとしてるからじゃね?
Pythonは良く知らないけど、;charset=utf-8いらないんじゃね?
34 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:35:49.54 ID:dpyX/gRC0
35 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:36:23.14 ID:dpyX/gRC0
36 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:37:29.05 ID:Nj/AEiwt0
Python2のソースをコピペしてるわけじゃないんだよね?
37 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:42:14.96 ID:dpyX/gRC0
>>UnicodeEncodeError: 'ascii' codec can't encode characters in position
>>96-106 : ordinal not in range(128)
96-106の部分にだけ日本語があるプログラムだった
'ascii' codec をuff-8 codec にすれば良いんだろうけどこの時はどのソフトがエンコードしようとしてるんだ?
38 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:42:20.29 ID:Ko+7zrOzP
39 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:44:59.57 ID:dpyX/gRC0
>>38 Unicode ニアリーイコール utf-8
40 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:47:57.60 ID:Ko+7zrOzP
>>39 全然ちげーよハゲ
Unicodeは文字の集合でUTF-8は文字の符号化方式だろうがハゲ
41 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:48:21.70 ID:n8FCUIND0
スレと関係ないんだけど、2chがVPN経由での書き込みを禁止するシステムを作ったらしいね 海外ホストに「!」をつける ↓ 海外ホストからの書き込み禁止 ↓ VPN禁止 これの意図するものはマジで1個しかない・・・
筑波
43 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:50:25.72 ID:n8FCUIND0
そのせいかmechanizeで色々と2chBOT作ってたのに動かなくなっちゃったわ 一応まだ手段は残ってるけど 海外の本気の奴らがVPN経由の書き込み規制ごときでやめるわけないし どの程度の効果があるのか
44 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:52:17.96 ID:n8FCUIND0
おそらく何らかの趣旨の書き込みを 日本のbbsから消し去りたいんだろうな 大規模規制やVPN禁止までやってもダメだったら あとはNSAみたいに全部のPCを管理下に置く事やっていくしかない winnyみたいな匿名ソフトが、日本政府に嫌われる理由とは
45 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:52:50.08 ID:dpyX/gRC0
>>40 Unicodeに準じた文字の符号化方式がutf-8で
Unicode使いたければutf-8使うことになるんだから全然違くはない
ニアリーイコールでしょ
ハゲとか暴言はいて自分の知ったかぶりをみえなくするのはやめてください
46 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:54:13.60 ID:igBP7UF10
UTF-16のことも思い出してあげてください
47 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 19:57:08.81 ID:n8FCUIND0
インターネットは警察などが介入できない領域であってほしいんだが
48 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:00:16.06 ID:Ko+7zrOzP
>>45 確かに違うものをニアリーイコールで片付けると
正確さを求められるプログラミングはできなくなる
UnicodeとUTF-8は魚と刺し身くらい違うぞ
Python3の文字列の変数はUnicode型でASCII以外の文字列も使っているのに
デフォルトのエンコーディングがASCIIになってるからバグってんだろうがよ
49 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:08:40.19 ID:igBP7UF10
昔Unicodeのことを符号化方式だと思ってた UTF-16をUnicodeって書いてるメモ帳のせいで しねM糞
50 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:10:54.82 ID:n8FCUIND0
なんで文字コード理解してないのにPythonでCGIなのかと
51 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:11:46.61 ID:irmZXFz80
>>41 去年VPN使った大規模な荒らしが流行ってアク禁になった
52 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:11:59.94 ID:n8FCUIND0
PerlもRubyもPythonも今はUTF-8に統一される動き べつの文字コードでも動かせるけど 特に理由がないならやらない
53 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:13:49.89 ID:dpyX/gRC0
54 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:14:41.70 ID:n8FCUIND0
そもそも分かっていないうちはマルチバイト文字使わずに ローマ字だけ使ってプログラミングしていれば良い マルチバイト文字を表示させるってOSからしたら 結構大変なことなんだ 転送量減らす為にUTF-8だってすべてが3バイトってわけじゃないし 1バイト〜6バイトくらいが混在してるんだっけ ああ
55 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:18:05.00 ID:igBP7UF10
議論が逸れとる ニアリーイコールというお互い定義が違う言葉を使うから咬み合わないんじゃん UnicodeとUTF-8は関係があるっていう主張と違うものを一緒くたにするなっていう主張だろ? どっちも正解だし本題に戻りなよ
56 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:18:55.46 ID:dpyX/gRC0
>>45 そしてお前は
>>38 で
>>Python3って文字列Unicodeだけになったんだっけか
>>デフォルトのエンコーディングutf-8じゃないんじゃねえの
と言ってるがPython3のデフォルトのエンコードはutf-8だ
57 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:21:30.73 ID:n8FCUIND0
ダメだこいつ
58 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:21:45.47 ID:dpyX/gRC0
59 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:23:35.78 ID:igBP7UF10
今度は”デフォルトエンコーディング”の意味が咬み合っていなさそうな予感
サーバのデフォルトエンコーディングの話とPythonのソースコードをUTF-8で書く話かな
61 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:32:50.24 ID:n8FCUIND0
まず
>>11 のやつと
print 1
だけかいたCGI実行して表示されるかどうか試せよ
これで表示されないなら最初っからおかしい
62 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:34:14.42 ID:n8FCUIND0
半角の英数字は文字コード関係ないから まずはそれでtestしてからマルチバイト
64 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:36:04.79 ID:xrCZmjvU0
なんでPythonは後方互換性持たせなかったのかな?
おおようやくPython3に詳しい識者登場
66 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:37:04.00 ID:n8FCUIND0
Pythonとかやったことないわ 他言語の知識で喋る
67 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:41:40.81 ID:dpyX/gRC0
>>61 #!/usr/bin/env python3.3
print('Content-type: text/html;charset=utf-8\n')
print(1)
で動いた
68 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:44:31.63 ID:n8FCUIND0
>>67 そしたらそのソースコード書いてるファイルの文字コードをUTF-8で保存して
"あ"
とか表示させられればok
69 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:50:03.79 ID:dpyX/gRC0
70 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:51:34.72 ID:n8FCUIND0
>>69 ブラウザのメニューバーのとこで
表示 → エンコード → UTF-8
って選択されてる?
71 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:52:03.18 ID:xrCZmjvU0
>>67 pythonよくわからないけど
#!/usr/local/bin/python3.3
とかじゃないの?
>>63 にこう書いてある
> stdout は print() および expression 文の出力と、input() のプロンプトに使用されます。
> ・・・
>デフォルトでは、これらストリームは open() 関数で返された一般テキストストリームです。パラメータは以下から選ばれます:
>The character encoding is platform-dependent. Under Windows,
>if the stream is interactive (that is, if its isatty() method returns True),
>the console codepage is used, otherwise the ANSI code page. Under other platforms, the locale encoding is used (see locale.getpreferredencoding()).
>ただし、すべてのプラットフォームにおいて、環境変数 PYTHONIOENCODING に設定した値でこの設定を上書きできます。
ということはつまりシステムロケールのエンコーディングをutf-8で指定するか
PYTHONIOENCODINGを指定すればOK?
>>1 の環境はデフォでUSになってるからASCIIってこと?
73 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:57:43.90 ID:dpyX/gRC0
>>69 の時の
サーバーのerror_logはこれ
[Sun Jan 19 19:19:40 2014] [error] [client ●●●.●●●.●.●●●] Traceback
(most recent call last):
[Sun Jan 19 19:19:40 2014] [error] [client ●●●.●●●.●.●●●] File
"/var/www/cgi-bin/●●●●.py", line 36, in <module>
[Sun Jan 19 19:19:40 2014] [error] [client ●●●.●●●.●.●●●]
print(html_body.format(content))
[Sun Jan 19 19:19:40 2014] [error] [client ●●●.●●●.●.●●●]
UnicodeEncodeError: 'ascii' codec can't encode characters in position
96-106: ordinal not in range(128)
74 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:58:11.32 ID:VVkGLMQeP
locale.getpreferredencoding = lambda: 'UTF-8' もしくはこれを頭に書いときゃいける?
76 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 20:59:42.28 ID:dpyX/gRC0
>>73 は間違い
#!/usr/bin/env python3.3
print('Content-type: text/html;charset=utf-8\n')
print('あ')
でこのエラー
[Sun Jan 19 20:52:51 2014] [error] [client ●●●.●●●.●.●●●] Traceback
(most recent call last):
[Sun Jan 19 20:52:51 2014] [error] [client ●●●.●●●.●.●●●] File
"/var/www/cgi-bin/●●●●.py", line 3, in <module>
[Sun Jan 19 20:52:51 2014] [error] [client ●●●.●●●.●.●●●] print('\
\u3042')
[Sun Jan 19 20:52:51 2014] [error] [client ●●●.●●●.●.●●●]
UnicodeEncodeError: 'ascii' codec can't encode character '\\u3042' in
position 0: ordinal not in range(128)
77 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:00:15.94 ID:k7o0WIDv0
最少コードで動かして何が原因か探っていってみなよ
78 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:01:13.40 ID:n8FCUIND0
asciiに変換しようとしたらユニコードでしたって言われてるっぽい? Pythonにもソースコードにマジックコメント書くんだっけ
79 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:03:18.10 ID:n8FCUIND0
#!/usr/bin/env python3.3 # -*- coding: UTF-8 -*- print('Content-type: text/html;charset=utf-8\n') print('あ') これで無理?
80 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:03:31.86 ID:dpyX/gRC0
81 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:04:53.33 ID:igBP7UF10
print(1)の代わりに print(sys.getdefaultencoding()) print(sys.stdout.encoding) この2つ出力してみたらどっちかasciiになってるんじゃないかな
82 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:06:39.94 ID:dpyX/gRC0
83 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:07:49.26 ID:k7o0WIDv0
文字コード何で保存してんの?
84 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:07:55.67 ID:xrCZmjvU0
>>79 これはエディタにこのファイルはutf-8だって伝えているだけかも
85 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:11:11.56 ID:igBP7UF10
-*- みたいな表記はEmacs用のおまじないのコメントじゃなかったっけ? std.outのエンコーディングが問題なので関係ないかと
86 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:11:42.48 ID:dpyX/gRC0
>>81 utf-8 ANSI_x3.4-1968
87 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:13:09.03 ID:k7o0WIDv0
それ日本語使えなくね?
88 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:15:31.44 ID:n8FCUIND0
89 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:16:52.15 ID:igBP7UF10
Linuxのシステムロケールの設定がLANG=Cになってそうな感じするね
LANG=ja_JP.utf-8に変えるか環境変数PYTHONIOENCODING をutf-8に設定するかしてみてよ
ソースコード上で解決するなら
>>75 かもしくは
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
でどうだろ
# coding: utf-8 import sys ... sys.stdout.buffer.write("あいうえお".encode("utf-8"))
91 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:17:55.78 ID:n8FCUIND0
print('あ'.encode('utf_8')) これ無理?
92 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:18:17.34 ID:k7o0WIDv0
93 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:18:19.65 ID:dpyX/gRC0
>>81 これは
import sys
をしてから使いましょう
ラテン系以外の言葉は人間の言葉じゃないからだよ、猿
#!/usr/bin/perl print "Content-type: text/html\n\nあ";
96 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:20:20.37 ID:k7o0WIDv0
パールでやるのかよw
97 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:20:50.85 ID:+tH4DsoY0
perl舐めんなよ
98 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:20:51.41 ID:igBP7UF10
99 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:21:30.33 ID:k7o0WIDv0
これぐらいで引っかかるならパールの方が早いか
100 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:23:21.99 ID:igBP7UF10
101 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:27:43.28 ID:dpyX/gRC0
>>81 sshでサーバーのPythonコンソール使うと
>>>import sys
>>>print(sys.getdefaultencoding())
>>>utf-8
>>>print(sys.stdout.encoding)
>>>UTF-8
何だけど
>>81 だと
>>86 なんだよ
ANSI_X3.4-1968って多分ASCII関係だよな
102 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:28:34.19 ID:dpyX/gRC0
103 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:30:30.10 ID:igBP7UF10
ApacheからCGIとしてプロセス起動した時に変えられてるってことか 複雑怪奇やね\(^o^)/
104 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:31:14.26 ID:8wT/kVhz0
105 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:32:02.45 ID:dpyX/gRC0
>>88 Python3からは標準でutf-8だからローカルでは気にせずに日本語使えてた
Pythonさんは悪くないです
僕が悪いんです
106 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:33:47.80 ID:igBP7UF10
Python3になってマルチバイトの取り扱いが楽になるという噂は嘘だったのか それともPython2はもっと大変だったのか
107 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:35:19.16 ID:k7o0WIDv0
どんなサーバ環境で使ってるんだ
108 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:36:01.00 ID:igBP7UF10
109 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:42:04.66 ID:dpyX/gRC0
>>89 システムロケールは全部
ja_JP.UTF8
でした
110 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:45:01.28 ID:14Jqn0zQ0
pythonでcgiやるとこんなに不幸で大変なのかやはりphpは正義だった
111 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:46:07.67 ID:dpyX/gRC0
>>76 のエラーの中の
\u3042
はユニコードの'あ'
どこの誰がこれをASCIIでエンコードしようとしてるんだ?
112 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:46:35.82 ID:mm3sFnvC0
CGIがもうオワコンだよな 書籍もないし
113 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:50:44.31 ID:k7o0WIDv0
@ApacheがCGI要求 ⇒ APythonコード ⇒ Bpython.exe実行 ⇒ CHTML生成 ⇒ DApacheで返す Bでエラーはいてるんだからapacheの 問題じゃなくてpythonの標準出力の文字コードの問題?
114 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:51:03.70 ID:igBP7UF10
Apacheさんのconfに SetEnv PYTHONIOENCODING utf8 の一行をつっこむ
115 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:53:11.70 ID:dpyX/gRC0
>>91 b'\xe3\x81\x82'
ってでた
116 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:54:09.86 ID:14Jqn0zQ0
>>113 わしpython使わんからよーわからんけど蛇よりcgiとかアパッチの設定のよーな、、
何かデフォの設定って何故か後で切り替えても切り替わらないパターンってたまに起こるからトラウマ
117 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:54:24.26 ID:igBP7UF10
118 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:58:40.30 ID:igBP7UF10
>>116 どこがどうなってるかよくわからんのでひと通りデーモンを再起動させてみる
→設定変えたせいで起動しなくなった/(^o^)\
これが最高にトラウマ
119 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 21:59:59.33 ID:igBP7UF10
そういやapacheで話進めてるけどwebサーバはapacheだよね?
120 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:03:48.22 ID:dpyX/gRC0
121 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:09:06.52 ID:igBP7UF10
PYTHONIOENCODING 設定しても無理そう?
122 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:09:50.06 ID:k7o0WIDv0
アパッチの問題ならpythonのcgiサーバなら動くってことか?
123 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:14:42.25 ID:dpyX/gRC0
進 展 が な い 解 決 し て い な い
124 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:15:33.15 ID:dpyX/gRC0
<Directory "/oma/e/no/basho/"> Options ExecCGI AddHandler cgi-script .py SetEnv LANG ja_JP.UTF-8 </Directory>
127 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:21:08.61 ID:igBP7UF10
>>124 apacheのhttpd.confに
>>114 突っ込むか
もしくは
>>125 みたいにCGIの設定してる部分にSetEnv LANG〜の行を突っ込む
128 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:25:16.09 ID:igBP7UF10
もちろんapacheの再起動は必要
129 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:28:02.60 ID:dpyX/gRC0
apacheのエラーログの仕組み教えて
130 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:28:51.97 ID:dpyX/gRC0
なんの解決もしてない
132 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:29:46.72 ID:k7o0WIDv0
そもそもアパッチでCGIは動くように設定してあるのかよww
133 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:30:22.43 ID:igBP7UF10
マルチバイト使わなきゃ動くって話なので多分
134 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:31:09.98 ID:dpyX/gRC0
135 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:31:24.44 ID:igBP7UF10
137 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:33:11.03 ID:dpyX/gRC0
>>135 エラーログの仕組みわかればどの時点でasciiでエンコードしようとしてるのかわかるだろ
138 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:35:28.67 ID:dpyX/gRC0
139 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:35:59.01 ID:igBP7UF10
>>137 Apacheのとこで原因切り分けるだけなら
>>126 の言うとおりPythonのCGI鯖使いなよ……
>>138 そういうこと。やってみて
やったらスクリプト全部貼って
141 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:39:15.13 ID:mm3sFnvC0
流し読みしただけだけどいまいち状況がわからない
142 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:39:41.70 ID:dpyX/gRC0
>>139 >>126 のリンク先はPython2.4での話だから
Python3のドキュメントではCGIHTTPServerが
レスポンスヘッダも要るのかな #!/usr/bin/env python3.3 # -*- coding: UTF-8 -*- import sys import io buf = sys.stdout.buffer sys.stdout.detach() sys.stdout = io.TextIOWrapper(buf, encoding='utf-8', newline='') print('Content-type: text/plain; charset=UTF-8\n\n') print('あいうえお') sys.stdout.flush()
144 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:46:32.79 ID:k7o0WIDv0
python3はこっちか import http.server http.server.test(HandlerClass=http.server.CGIHTTPRequestHandler)
145 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:46:41.42 ID:dpyX/gRC0
>>140 #!/usr/bin/env python3.3
# cosing: utf-8
import sys
print('Content-type: text/html;charset=utf-8\n')
sys.stdout.buffer.write("あいうえお".encode("utf-8"))
だと真っ白
#!/usr/bin/env python3.3
# cosing: utf-8
import sys
print('Content-type: text/html;charset=utf-8\n')
print(sys.stdout.buffer.write("あいうえお".encode("utf-8")))
だと
15
ってでた
146 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:48:36.43 ID:igBP7UF10
先にdetach()が要るのか・・・
>>142 >>143 で解決されそうだけど一応
どうせライブラリの名前変わっただけで似たようなのあるでしょ?
147 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:49:00.19 ID:dpyX/gRC0
>>145 # coding: utf-8
でもだめ
>>145 15 は write() したバイトの数
これなら動く?
#!/usr/bin/env python3.3
# coding: utf-8
import sys
result = "Content-type: text/html;charset=utf-8\n\n"
result += "<h1>あいうえお</h1>"
sys.stdout.buffer.write(result.encoding("utf-8"))
ああっと。sys.stdout.buffer.write(result.encode("utf-8")) の間違い
150 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 22:57:39.99 ID:dpyX/gRC0
>>143 これやったら
あいうえお
って、でた
おれは意味もわからずやってるから使い方知らないけど
今までので設定変えるコードとかあった?
151 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 23:04:44.93 ID:dpyX/gRC0
>>148 太くてでかい文字で
あいうえお
ってでた
152 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 23:06:33.39 ID:dpyX/gRC0
結局なんだったの?
153 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 23:12:38.70 ID:igBP7UF10
>>90 で正解出てたんじゃん
やっぱ知ってる奴に任せるのが一番だな
154 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 23:17:23.84 ID:dpyX/gRC0
155 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 23:18:17.02 ID:pU1ykkOP0
おっ.pyと聞いて
156 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 23:20:42.69 ID:igBP7UF10
>>63 にあるように標準出力のエンコーディングがutf-8ではなかったので
>>143 はprint関数が利用する標準出力をエンコーディングがutf-8の設定で作りなおしてる
>>90 ,148のやり方は文字列をutf-8でエンコードしたバイト列を標準出力のバッファにそのまま渡しちまえという感じ
Pythonようわからんけど
157 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 23:25:32.18 ID:mm3sFnvC0
マルチバイト文字で発狂したくなる気持ちはわかる
158 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 23:27:49.67 ID:dpyX/gRC0
>>156 >>101 みたいにローカルだと標準出力のエンコーディングがutf-8なのに
cgi使うとASCIIになるのはなぜ?
159 :
以下、名無しにかわりましてVIPがお送りします :2014/01/19(日) 23:35:11.62 ID:igBP7UF10
>>158 それは知らんなApacheが原因かどうかは切り分けて調べてくれ
Pythonのhttp.serverモジュール(?)でCGI動かして標準出力のエンコーディングがちゃんとutf-8になるならApacheが悪い
俺がこのスレで得た乏しい知識から推察するに
Apache経由でPythonのプロセス起動した時に
システムロケールの設定と違う環境変数渡してるとかそんな感じじゃないの
Pythonが流行らないわけだな