PythonのUTF-8エンコーディング(codecs
パッケージ)は、Unicode文字28,29、および30を行末として解釈します。どうして?そして、どうしたらそれを防ぐことができますか?Pythonコーデックの行末
例コード:
with open('unicodetest.txt', 'w') as f:
f.write('a'+chr(28)+'b'+chr(29)+'c'+chr(30)+'d'+chr(31)+'e')
with open('unicodetest.txt', 'r') as f:
for i,l in enumerate(f):
print i, l
# prints "0 abcde" with special characters in between.
ここでのポイントは、私はそれが何を期待するとして、それは1行としてそれを読み込むことです。今私がcodecs
を使ってUTF-8で読むと、それはそれを多くの行として解釈します。
import codecs
with codecs.open('unicodetest.txt', 'r', 'UTF-8') as f:
for i,l in enumerate(f):
print i, l
# 0 a
# 1 b
# 2 c
# 3 de
# (again with the special characters after each a, b, c, d
文字「28」から「31」は、「情報セパレータ4」から「1」(その順番)と記載されています。 2つのことが私に打撃を与えます:1)28〜30は行末として解釈され、2)31はそうではありません。これは意図された動作ですか?行末として解釈される文字の定義はどこで見つけることができますか?行末として解釈しない方法はありますか?
ありがとうございました。
codecs.open
に 'UTF-8'引数をコピーするのを忘れました。私の質問のコードが修正されました。
ファイルを 'rb 'モードで開くとどうなりますか? – unutbu
違いはありません。 – Paul
@Paul、あなたは自分の質問に答えることができ、あなたが好きならそれを受け入れることができます –