[英]ANSI, ASCII, Unicode and encoding confusion with Python
我很高兴使用BeautifulSoup,我也使用文本文件作为我的Python脚本的输入参数。
然后我遇到了着名的“UnicodeEncodeError”错误。
我一直在这里读问题,但我仍然感到困惑。
ASCII与所有这些有什么关系? 我在文本编辑器(Notepad ++)上使用什么编码? ANSI? UTF-8? 将字符串解码为ASCII似乎并不总是有效(我猜这个字符串是来自BeautifulSoup的不同编码)。 我该如何解决?
无论如何,任何帮助和澄清将不胜感激。
谢谢!
编辑:阅读BeautifulSoup的文档,它说它只使用unicode但我仍然得到Unicode错误:(
File "C:\Python26\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u300d' in position
3: character maps to <undefined>
ANSI不是字符编码(通常用于指代某些转义序列,但它当然是美国国家标准协会的首字母缩写)。 您可以在Notepad ++中设置编码(并检查您正在使用的编码) - 希望是utf-8,因为这是一种通用编码(允许您表示任何Unicode点)。 您可以使用显式decode
方法调用从utf-8编码的文本构建unicode,或者使用codecs.open
将文件读取为unicode(两者都要求您指定编码名称 - 再次,希望'utf8')。
截至目前(2014年,第1,23页),对于Notepad ++(NPP),似乎仍有很多关于使用ANSI作为Notepad ++编码术语的最新/未解决的BugReports / Discussions。
问题
Google:notepad ++ ansi编码
结果:
Notepad ++只称为“ANSI”的编码,是否有人知道如何为Ruby调用它?
解
以下NPP论坛讨论似乎指向了我最好的解决方案。
请参阅编码检测,ANSI(Windows 1252)与UTF-8(无BOM)
首选项 - >新建文档>编码>没有BOM的UTF8“称为应用于已打开的ANSI文件
我检查了上面的内容,对作者进行了反复检查。
然后我开始我的Python脚本如下。
#!/usr/bin/python
# -*- coding: utf-8 -*-
ASCII与所有这些有什么关系?
Python无法找出用于存储文本的编码,因此默认情况下它假定为ascii。 但是,ASCII只定义了前128个字符,因此任何外部都会导致解码错误(这实际上是好事,因为它不会让你使用错误解码的字符串)。
大多数情况下你的字符串是utf-8,因为它是编码Unicode的最常用方法,因此通常可以安全地在str
类型字符串上执行s.decode('utf-8')
(或者使用unicode(s, 'utf-8')
电话)
如果您事先不知道编码文本的类型,并且它不提供编码元数据,您可以尝试使用chardet模块。
BeautifulSoup可以以不同的编码和方式输出结果,因此您只需指定您想要unicode。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.