如何在python中读取unicode文件(不是UTF-8)

时间:2014-05-05 05:33:49

标签: python unicode encoding

如何阅读python 2.x中的 unicode 文件(不是UTF-8,未知编码)

我试图找到一种读取unicode文件的方法。 我在互联网上搜索了很长时间。 但我找不到它。 我发现的是读取编码为UTF-8等文件的方法。 我知道,当我需要读UTF-8时,我可以使用编解码器。

codecs.open('unicode2.txt',encoding='utf-8')

使用此功能,我可以阅读UTF-8文件。 但我想知道如何读取unicode文件。 许多标题为“在python中读取unicode文件的方式”的帖子实际上告诉了一种方法来读取UTF-8,UTF-16等文件。

为什么有人没有解释如何阅读'UNICODE'文件?

这是我尝试用python读取的文本文件的十六进制值的示例。

这是韩语,“파이썬에서 한글 읽기

(FF FE) 0C D3 74 C7 6C C3 D0 C5 1C C1 20 00 5C D5 00 AE 20 00 7D C7 30 AE

(FF FE)表示字节顺序。 每个2字节表示字符。如您所见,空间被写为'20 00'而不是'20' 在unicode中,空格被写为'20 00'。但是UTF-8,空格被写成'20'。

无法使用“codecs.open('unicode2.txt',encoding='**unicode**')”等编解码器

在python中真的没有办法读取“unicode”文件吗?

1 个答案:

答案 0 :(得分:4)

磁盘文件是 bytes 的序列,如果使用utf-8,utf-16le等字符编码,则可以将其解释为文本。 “unicode”不是字符编码。

There Ain't No Such Thing As Plain Text

您的示例文件可能使用utf-16le编码:

>>> text = u"파이썬"
>>> text.encode('utf-16le')
'\x0c\xd3t\xc7l\xc3'
>>> text.encode('utf-16le').encode('hex')
'0cd374c76cc3'

b'\xff\xfe' == codecs.BOM_UTF16_LE是UTF-16(LE)字符编码的BOM。要读取此类文件,您可以使用utf-16编码(根据BOM选择BE或LE):

import codecs

with codecs.open('filename', encoding='utf-16') as file:
    text = file.read()