首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python 2/3解析ANSI和UTF-16LE文件的最佳方式?

使用Python 2/3解析ANSI和UTF-16LE文件的最佳方式?
EN

Stack Overflow用户
提问于 2009-05-04 09:12:42
回答 3查看 3.4K关注 0票数 0

我有一个用ANSI或UTF-16LE编码的文件集合。我想让python使用正确的编码打开文件。问题是,使用UTF-16le编码时,ANSI文件不会引发任何类型的异常,反之亦然。

有没有一种简单的方法可以使用正确的文件编码打开文件?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-04 09:26:14

使用chardet库检测编码。

票数 4
EN

Stack Overflow用户

发布于 2009-05-04 09:27:06

您可以检查文件开头的BOM,以检查它是否为UTF。

然后进行相应的unicode.decode (使用其中一个standard encodings)。

编辑或者,也许,尝试s.decode('ascii')你的字符串(给定的s是变量名)。如果抛出UnicodeDecodeError,则将其解码为“utf_16_le”。

票数 0
EN

Stack Overflow用户

发布于 2009-05-05 12:09:01

文件里有什么?如果它是拉丁字母表中的纯文本,那么UTF-16LE文件几乎每隔一个字节就为零。另一方面,在windows-1252文件中,我不希望看到任何零。例如,下面是windows-1252中的“Hello”

代码语言:javascript
复制
93 48 65 6C 6C 6F 94

UTF-16LE中的...and:

代码语言:javascript
复制
1C 20 48 00 65 00 6C 00 6C 00 6F 00 1D 20

除了花括号之外,每个字符都映射到相同的值,并添加了一个尾随的零字节。事实上,对于ISO-8859-1字符集中的每个字符都是如此(windows-1252扩展了ISO-8859-1,为几个打印字符添加了映射,如花括号,以替换范围0x80..0x9F中的控制字符)。

如果你知道所有的文件都是windows-1252或UTF-16LE,那么你只需要快速扫描一下0就可以知道哪个是哪个了。chardet如此缓慢和复杂有一个很好的原因,但在这种情况下,我认为你可以逃脱快速和肮脏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/819396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档