繁体   English   中英

ANSI,ASCII,Unicode和编码与Python的混淆

[英]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编码

结果:

#4095“ANSI as UTF-8”具有误导性

#124 ansi编码和德语字母

Notepad ++只称为“ANSI”的编码,是否有人知道如何为Ruby调用它?

Notepad ++论坛 - 搜索讨论:ANSI编码

以下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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM