将“纯文本”解释为python中的utf-8文本

时间:2012-06-18 16:36:54

标签: python string text encoding utf-8

我有一个带有文本的文本文件应该被解释为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

我还试过'编码'和'解码'功能,有什么想法吗?

谢谢!

1 个答案:

答案 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列表或对象)的一部分。