[過去ログ]
Pythonのお勉強 Part63 (1002レス)
Pythonのお勉強 Part63 http://mevius.5ch.net/test/read.cgi/tech/1582507911/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
877: デフォルトの名無しさん (ワッチョイ bf8c-th+2) [] 2020/09/04(金) 13:27:43.28 ID:gLEobkXD0 utf-8で書かれたファイルを標準入力にあたえてタブで区切ってリストにしたいんですが文字化けしてしまいます。 ステップバイステップで色々試していくとどうもリストに入れると化けるみたいなんですが、なんでですか?? ↓最終的にこんなプログラムで文字化けする/しないの差が出ます。 # -*- coding: utf-8 -*- import sys # stdin = "住所CD 都道府県CD 市区町村CD 町域CD 郵便番号 事業所フラグ 廃止フラグ 都道府県 都道府県カナ 市区町村 市区町村カナ 町域 町域カナ 町域補足 京都通り名 字丁目 字丁目カナ 補足 事業所名 事業所名カナ 事業所住所 新住所CD" a = input().encode('unicode-escape').decode('utf-8').split("\\t") [print(x.encode().decode('unicode-escape')) for x in a] #化けない print([x.encode().decode('unicode-escape') for x in a]) #化ける http://mevius.5ch.net/test/read.cgi/tech/1582507911/877
880: デフォルトの名無しさん (ワッチョイ bf8c-th+2) [] 2020/09/04(金) 14:42:48.83 ID:gLEobkXD0 >>878 その通りでした。OSはWin10で、pyは3.8.5です。 DOSプロンプトから実行していてcp=932です。でも、>result.txtみたいにして出力していてutf-8で出力されてます。 あと、元々はinput().split('\t')をしたかっただけなんですが、文字化けしてしまって色々と調べてました。 文字化けの具合は>>877に書いた化けっぷりと同じです。 s = input() print(s) # 正常 print(s.split('\t')) #化ける という感じです。 http://mevius.5ch.net/test/read.cgi/tech/1582507911/880
881: デフォルトの名無しさん (ワッチョイ bf8c-th+2) [] 2020/09/04(金) 14:51:51.80 ID:gLEobkXD0 >>879 __repr__というのがあるんですね。調べてみます http://mevius.5ch.net/test/read.cgi/tech/1582507911/881
885: デフォルトの名無しさん (ワッチョイ bf8c-th+2) [] 2020/09/04(金) 15:30:13.83 ID:gLEobkXD0 >>880 >>882 そういうことか。わかりました。リストの中は化けてなんかないでし。forで中を覗くと正しかったです。つまり、listのtoStringまわりでおかしいということですね。 __str__なのか__repr__なのか、まだわかってませんが。でも、これがデフォルトの挙動だとすると使いづらくないんですか? >>883 split("\\t")はunicode_escapeした状態でタブ区切りしたのでそうなってます。本来はsplit("\t") http://mevius.5ch.net/test/read.cgi/tech/1582507911/885
889: デフォルトの名無しさん (ワッチョイ bf8c-th+2) [] 2020/09/04(金) 16:19:28.31 ID:gLEobkXD0 みなさんのコメントでそんなわけないと自分のコードを見直し pythonのデフォルトがutf-8で、コマンドプロンプトのchcpを65001にすればいい、 という思い込みがありました。 print(sys.stdin.encoding)やprint(sys.stdout.encoding)をしたらcp932のままでした。 ので、 sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8') sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') とすることで、全てがうまくいきました。 みなさん、ありがとうございました! http://mevius.5ch.net/test/read.cgi/tech/1582507911/889
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.037s