我有一堆文本文件包含编码错误的韩语字符。具体来说,字符似乎是用 EUC-KR 编码的,但文件本身是用 UTF8+BOM 保存的。
到目前为止,我成功修复了一个文件,内容如下:
- 使用 EditPlus 打开文件(它显示文件的编码是
UTF8+BOM
)
- 在 EditPlus 中,将文件另存为
ANSI
-
最后,在Python中:
with codecs.open(html, 'rb', encoding='euc-kr') as source_file:
contents = source_file.read()
with open(html, 'w+b') as dest_file:
dest_file.write(contents.encode('utf-8'))
我想自动化这一点,但我一直没能做到。我可以用Python打开原始文件:
codecs.open(html, 'rb', encoding='utf-8-sig')
但是,我一直无法弄清楚如何做2. part.
我假设你有文字already编码为EUC-KR,然后编码again为 UTF-8。如果是这样,编码为 Latin 1(Windows 称之为 ANSI)确实是恢复原始 EUC-KR 字节串的最佳方法。
打开带有 BOM 的 UTF8 文件,编码为 Latin1,解码为 EUC-KR:
import io
with io.open(html, encoding='utf-8-sig') as infh:
data = infh.read().encode('latin1').decode('euc-kr')
with io.open(html, 'w', encoding='utf8') as outfh:
outfh.write(data)
我正在使用io.open()功能 http://docs.python.org/2/library/io.html#io.open在这里而不是codecs
作为更稳健的方法;io
是新的 Python 3 库,也向后移植到 Python 2。
Demo:
>>> broken = '\xef\xbb\xbf\xc2\xb9\xc3\x8c\xc2\xbc\xc3\xba'
>>> print broken.decode('utf-8-sig').encode('latin1').decode('euc-kr')
미술
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)