修复文件编码
Fixing file encoding
今天我订购了 7 种不同语言的翻译,其中 4 种看起来不错,但是当我打开另外 3 种,即希腊语、俄语和韩语时,那里的文字与任何语言。它看起来像一堆错误字符,就像文件编码错误时出现的那种。
例如,这是韩语翻译的部分输出:
½Ì±ÛÇ÷¹À̾î
¸ÖƼÇ÷¹À̾î
¿É¼Ç
我可能连一点韩语都不会说,但我可以肯定的告诉你那不是韩语。
我假设这是一个文件编码问题,当我在记事本中打开文件时,编码列为 ANSI,这显然是一个问题;其他两种语言也是如此。
有没有人知道如何修复这 3 个文件的编码;我要求翻译人员以 UTF-8 格式重新上传,但与此同时,我想我可能会尝试自己修复它。
如果有人有兴趣查看实际文件,您可以get them from my Dropbox。
如果您将字节流视为字节对,它们看起来有点像韩语,但我无法判断它们是否符合您的预期。
bash$ python3.4
Python 3.4.3 (v3.4.3:b4cbecbc0781, May 30 2015, 15:45:01)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> buf = '½Ì±ÛÇ÷¹À̾î'
>>> [hex(ord(b)) for b in buf]
>>> ['0xbd', '0xcc', '0xb1', '0xdb', '0xc7', '0xc3', '0xb7', '0xb9', '0xc0', '0xcc', '0xbe', '0xee']
>>> u'\uBDCC\uB1DB\uC7C3\uB7B9\uC0CC\uBEEE'
'뷌뇛쟃랹샌뻮'
最好的办法是等待翻译人员上传 UTF-8 版本或让他们告诉您文件的编码。我不会假设它们的字节只是 16 位字符。
更新
我通过 chardet module and it detected the character set as EUC-KR 传递了这个。
>>> import chardet
>>> chardet.detect(b'\xBD\xCC\xB1\xDB\xC7\xC3\xB7\xB9\xC0\xCC\xBE\xEE')
{'confidence': 0.833333333333334, 'encoding': 'EUC-KR'}
>>> b'\xBD\xCC\xB1\xDB\xC7\xC3\xB7\xB9\xC0\xCC\xBE\xEE'.decode('EUC-KR')
'싱글플레이어'
根据Google翻译,第一行是"Single Player"。尝试用记事本打开它并使用 EUC-KR 作为编码。
今天我订购了 7 种不同语言的翻译,其中 4 种看起来不错,但是当我打开另外 3 种,即希腊语、俄语和韩语时,那里的文字与任何语言。它看起来像一堆错误字符,就像文件编码错误时出现的那种。
例如,这是韩语翻译的部分输出:
½Ì±ÛÇ÷¹À̾î
¸ÖƼÇ÷¹À̾î
¿É¼Ç
我可能连一点韩语都不会说,但我可以肯定的告诉你那不是韩语。
我假设这是一个文件编码问题,当我在记事本中打开文件时,编码列为 ANSI,这显然是一个问题;其他两种语言也是如此。
有没有人知道如何修复这 3 个文件的编码;我要求翻译人员以 UTF-8 格式重新上传,但与此同时,我想我可能会尝试自己修复它。
如果有人有兴趣查看实际文件,您可以get them from my Dropbox。
如果您将字节流视为字节对,它们看起来有点像韩语,但我无法判断它们是否符合您的预期。
bash$ python3.4
Python 3.4.3 (v3.4.3:b4cbecbc0781, May 30 2015, 15:45:01)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> buf = '½Ì±ÛÇ÷¹À̾î'
>>> [hex(ord(b)) for b in buf]
>>> ['0xbd', '0xcc', '0xb1', '0xdb', '0xc7', '0xc3', '0xb7', '0xb9', '0xc0', '0xcc', '0xbe', '0xee']
>>> u'\uBDCC\uB1DB\uC7C3\uB7B9\uC0CC\uBEEE'
'뷌뇛쟃랹샌뻮'
最好的办法是等待翻译人员上传 UTF-8 版本或让他们告诉您文件的编码。我不会假设它们的字节只是 16 位字符。
更新
我通过 chardet module and it detected the character set as EUC-KR 传递了这个。
>>> import chardet
>>> chardet.detect(b'\xBD\xCC\xB1\xDB\xC7\xC3\xB7\xB9\xC0\xCC\xBE\xEE')
{'confidence': 0.833333333333334, 'encoding': 'EUC-KR'}
>>> b'\xBD\xCC\xB1\xDB\xC7\xC3\xB7\xB9\xC0\xCC\xBE\xEE'.decode('EUC-KR')
'싱글플레이어'
根据Google翻译,第一行是"Single Player"。尝试用记事本打开它并使用 EUC-KR 作为编码。