ascii形式のファイルを解析していますが、big5(Trad。Chinese)に非ASCII文字が含まれています。
詳細については、CISACのCWRファイルを参照してください。ASCII以外の文字をASCIIファイルでデコードしますか?
私はnon-ascii文字をうまくデコードしようとしています。 ここ例ライン:
NWN000003930000016400507347 ^N&ÊÅ+/{^O
位置29から188には、BIG5で符号化されるべきです。
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
import binascii
from chardet.universaldetector import UniversalDetector
from chardet import detect
with open("/path/to/file") as fd:
line = fd.readline()
while line:
if line[0:3] == 'NWN':
last_name = line[29:188]
print last_name
print detect(line)['encoding']
print last_name.decode('big5')
line = fd.readline()
しかし、私は上記の行の取得結果は次のとおりです。
NWN000000140000016300401453 ^N/õ<Dï.^O
でもクラッシュ:
windows-1252
Traceback (most recent call last):
File "test_big5.py", line 36, in <module>
print last_name.decode('big5')
UnicodeDecodeError: 'big5' codec can't decode bytes in position 1-2: illegal multibyte sequence
I
None
&岒+/{
そして、次の行の
次のようにも試みました:#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from codecs import EncodedFile
from_encoding = 'big5'
to_encoding = 'utf8'
sys.stdout = EncodedFile(sys.stdout, from_encoding, to_encoding)
f = file("/path/to/file", "r")
str = f.read()
sys.stdout.write(str)
私は、サンプルファイルhere
私が間違ってやっているかについての任意のアイデアを添付?
なぜ最初にBig5としてファイルを開いていませんか? –
試してみることができる小さなサンプルファイルを投稿できますか?エンコードされたファイルは投稿するのが難しいかもしれませんが、最初の数行で失敗したファイルがあれば 'print(open( '/ path/to/file'、 'rb')の結果を投稿できます。 3]) 'を作成して、そのリストを簡単に取り出し、自分でファイルを再構築することができます。 – tdelaney
ファイルをバイナリ( '' rb "')で開くことで、問題を解決できると思う。あなたの比較は 'if line [0:3] == b'NWN ':'でなければなりません。 – tdelaney