解读“纯文本”,如蟒蛇UTF-8文本(Interpret “plain text” as utf-8

2019-07-29 23:55发布

我有一个应该被解释为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

我也试图与“编码”和“解码”功能,任何想法?

谢谢!

Answer 1:

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



文章来源: Interpret “plain text” as utf-8 text in python