0

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

我也尝试过“编码”和“解码”功能,有什么想法吗?

谢谢!

4

1 回答 1

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对于任何不是可识别的 Python 转义序列的数据,使用 解码的数据都将被视为 Latin-1。

但是要小心;可能你真的在看JSON 编码的数据,它使用相同的符号来指定字符转义。用于json.loads()解码实际的 JSON 数据;具有此类转义的 JSON 字符串用"引号分隔,通常是较大结构(例如 JSON 列表或对象)的一部分。

于 2012-06-18T16:39:52.337 回答