2017-05-08 6 views
0

私のpythonプロジェクトの一環として、utf-8でエンコードされたテキストファイルを読み込んでリストに分割する必要があります。しかし、アポストロフィが後に続く文字を使用すると、list()はutf-8を出力するようです。セイ内容で、UTF-8でエンコードされたinfile.txtというテキストファイルを取る:私はpython list()関数をutf-8に変更しました。

i like pi' 

とコード

intext = open("path/infile.txt").read() 
print intext 

outnum = list(intext) 
print outnum 

をそれが出て出力します。

i like pi’ 
['i', ' ', 'l', 'i', 'k', 'e', ' ', 'p', 'i', '\xe2', '\x80', '\x99'] 

私はOSX 10.11.6でPython 2.7.10を使用する

ありがとうございます!

+0

バイナリモードでファイルを開くと役立つことがあります。その方法は 'open(、" rb ")'です。 – SarcasticSully

+2

あなたはPython 2を使用している理由は何ですか? Unicodeのサポートは、Python 3のほうがはるかに堅牢です。 – tdelaney

+2

はい、Python 2では 'str'は* bytes *のシーケンスであるためです。 'utf-8'でエンコードされたファイルを読んでいるので、個々のバイトをリストに入れるとそれが得られます。あなたは何をしたいのですか?本当にできれば、Python 3だけを使うべきです。 –

答えて

0

あなたの目はあなたを欺く....よく、あなたの端末はあなたを欺くが、十分に近い。私はあなたの文字列を再構成し、アポストロフィを印刷することができます。しかし実際にはその文字列にはutf-8でエンコードさPythonはコード化された文字列を出力し、私のutf-8端末はそれをデコードしてユニコード文字を表示しました。これはPython 2の奇抜です。Python 3は、エンコードされた文字列とデコードされた文字列を別々に保つという仕事をします。

>>> chars = ['i', ' ', 'l', 'i', 'k', 'e', ' ', 'p', 'i', '\xe2', '\x80', '\x99'] 
>>> 
>>> s1 = ''.join(chars) 
>>> print s1 
i like pi’ 
>>> print repr(s1) 
'i like pi\xe2\x80\x99' 

ファイルがUTF-8であるので、あなたがユニコードに変換するcodecsモジュールを使用することができますエンコード。

intext = codecs.open("path/infile.txt", encoding="utf-8").read() 
関連する問題