我有一百个文件,根据chardet,每个文件都用以下之一编码:
['UTF-8', 'ascii', 'ISO-8859-2', 'UTF-16LE', 'TIS-620', 'utf-8', 'SHIFT_JIS', 'ISO-8859-7']
所以我知道文件编码,因此我知道用什么编码打开文件。
我希望仅将所有文件转换为 ascii。我还希望将不同版本的字符(如-
和)转换'
为它们的普通 ascii 等价物。例如b"\xe2\x80\x94".decode("utf8")
应该转换为-
. 最重要的是文本易于阅读。例如,我不想要don t
,而是don't
相反。
我该怎么做?
我可以使用 Python 2 或 3 来解决这个问题。
这是我对 Python2 的了解。我正在尝试检测那些以非 ascii 字符开头的行。
for file_name in os.listdir('.'):
print(file_name)
r = chardet.detect(open(file_name).read())
charenc = r['encoding']
with open(file_name,"r" ) as f:
for line in f.readlines():
if line.decode(charenc) != line.decode("ascii","ignore"):
print(line.decode("ascii","ignore"))
这给了我以下例外:
if line.decode(charenc) != line.decode("ascii","ignore"):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_16_le.py", line 16, in decode
return codecs.utf_16_le_decode(input, errors, True)
UnicodeDecodeError: 'utf16' codec can't decode byte 0x0a in position 6: truncated data