我有一个带有文本的文本文件应该被解释为utf-8但不是(这是以这种方式给我的)。 以下是文件典型行的示例:
\ u30ed \ u30f3 \ u30c9 \ u30f3 \ u5728 \ u4f4f
应该是:
ロンドン在住
现在,我可以通过在命令行中输入以下内容在python上手动执行:
>>> h1 = u'\u30ed\u30f3\u30c9\u30f3\u5728\u4f4f'
>>> print h1
ロンドン在住
这给了我想要的东西。有没有办法可以自动执行此操作?我试过这样的事情
>>> f = codecs.open('testfile.txt', encoding='utf-8')
>>> h = f.next()
>>> print h
\u30ed\u30f3\u30c9\u30f3\u5728\u4f4f
我还试过'编码'和'解码'功能,有什么想法吗?
谢谢!
答案 0 :(得分:3)
\u30ed\u30f3\u30c9\u30f3\u5728\u4f4f
不是UTF8;它使用的是python unicode转义格式。请改用unicode_escape
编解码器:
>>> print '\u30ed\u30f3\u30c9\u30f3\u5728\u4f4f'.decode('unicode_escape')
ロンドン在住
以下是上述短语的UTF-8编码,用于比较:
>>> '\u30ed\u30f3\u30c9\u30f3\u5728\u4f4f'.decode('unicode_escape').encode('utf-8')
'\xe3\x83\xad\xe3\x83\xb3\xe3\x83\x89\xe3\x83\xb3\xe5\x9c\xa8\xe4\xbd\x8f'
请注意,使用unicode_escape
解码的数据将被视为Latin-1,用于任何不可识别的Python转义序列。
但要小心;您可能正在查看 JSON编码数据,它使用相同的符号来指定字符转义。使用json.loads()
解码实际的JSON数据;具有此类转义的JSON字符串使用"
引号分隔,并且通常是较大结构(例如JSON列表或对象)的一部分。