Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ANSI、ASCII、Unicode和Python编码混淆_Python_Unicode_Beautifulsoup - Fatal编程技术网

ANSI、ASCII、Unicode和Python编码混淆

ANSI、ASCII、Unicode和Python编码混淆,python,unicode,beautifulsoup,Python,Unicode,Beautifulsoup,我很高兴地使用了BeautifulSoup,并且还使用了一个文本文件作为Python脚本的输入参数 然后我遇到了著名的“UnicodeError”错误 我一直在读SO的问题,但我还是很困惑 ASCII与所有这些有什么关系? 我在文本编辑器(记事本++)上使用什么编码?ANSI?UTF-8? 将字符串解码为ASCII似乎并不总是有效(我猜该字符串使用的是来自BeautifulSoup的不同编码)。我该如何解决这个问题 无论如何,任何帮助和澄清都将不胜感激 谢谢 编辑: 在阅读BeautifulSo

我很高兴地使用了BeautifulSoup,并且还使用了一个文本文件作为Python脚本的输入参数

然后我遇到了著名的“UnicodeError”错误

我一直在读SO的问题,但我还是很困惑

ASCII与所有这些有什么关系? 我在文本编辑器(记事本++)上使用什么编码?ANSI?UTF-8? 将字符串解码为ASCII似乎并不总是有效(我猜该字符串使用的是来自BeautifulSoup的不同编码)。我该如何解决这个问题

无论如何,任何帮助和澄清都将不胜感激

谢谢

编辑: 在阅读BeautifulSoup的文档时,它说它只使用unicode,但我仍然发现unicode错误:(

文件“C:\Python26\lib\encodings\cp437.py”,第12行,编码
返回编解码器.charmap\u encode(输入、错误、编码\u映射)
UnicodeEncodeError:“charmap”编解码器无法将字符u'\u300d'编码到位
3:角色映射到

ANSI不是字符编码(通俗地说,它指的是某些转义序列,尽管它当然是美国国家标准协会的首字母缩略词)。您可以在记事本++中设置编码(并检查您使用的编码)——希望是utf-8,因为这是一种通用编码(用于表示任何Unicode点)。您可以使用显式的
解码方法调用从utf-8编码的文本构建Unicode,或者使用
编解码器将文件读取为Unicode。打开
(这两种方法都要求您指定编码名称,希望是“utf8”)。

ANSI不是字符编码(通俗地说,它指的是某些转义序列,当然它是美国国家标准协会的首字母缩写)。您可以用记事本++设置编码(并检查您使用的编码)——希望是utf-8,因为这是一种通用编码(可以表示任何Unicode点)。您可以使用显式的
解码
方法调用从utf-8编码的文本构建unicode,或者使用
编解码器将文件读取为unicode。打开
(两者都要求您指定编码名称,希望是“utf8”)

ASCII与所有这些有什么关系

Python无法找出用于存储文本的编码,因此默认情况下采用ascii。然而,ascii仅定义前128个字符,因此任何超出此范围的内容都会导致解码错误(这实际上是一件好事,因为它不允许您使用错误解码的字符串)

大多数情况下,您的字符串都是utf-8格式,因为它是最常见的Unicode编码方式,所以在
str
类型字符串上进行
s.decode('utf-8')
通常是安全的(或者使用
Unicode(s,'utf-8')
调用)

如果您事先不知道编码文本的类型,并且它不提供编码元数据,那么可以尝试使用chardet模块

BeautifulSoup可以以不同的编码和方式输出结果,所以您只需在其中指定希望使用unicode

ASCII与所有这些有什么关系

Python无法找出用于存储文本的编码,因此默认情况下采用ascii。然而,ascii仅定义前128个字符,因此任何超出此范围的内容都会导致解码错误(这实际上是一件好事,因为它不允许您使用错误解码的字符串)

大多数情况下,您的字符串都是utf-8格式,因为它是最常见的Unicode编码方式,所以在
str
类型字符串上进行
s.decode('utf-8')
通常是安全的(或者使用
Unicode(s,'utf-8')
调用)

如果您事先不知道编码文本的类型,并且它不提供编码元数据,那么可以尝试使用chardet模块

BeautifulSoup可以以不同的编码和方式输出结果,因此您只需在其中指定希望使用unicode即可。

到目前为止(2014年1月23日),对于记事本++(NPP),关于使用ANSI作为记事本++编码术语,似乎仍有很多最近/未解决的错误报告/讨论

问题

谷歌:记事本++ansi编码

结果:

解决方案

以下NPP论坛讨论似乎为我指出了最佳解决方案

首选项->新文档>编码>无BOM的UTF8”调用 应用于打开的ANSI文件

我检查了上面的内容,而不是检查它的作者

然后我开始编写Python脚本,如下所示

#!/usr/bin/python
# -*- coding: utf-8 -*-
截至目前(2014年1月23日),对于记事本++(NPP),似乎仍有许多关于使用ANSI作为记事本++编码术语的最新/未解决的错误报告/讨论

问题

谷歌:记事本++ansi编码

结果:

解决方案

以下NPP论坛讨论似乎为我指出了最佳解决方案

首选项->新文档>编码>无BOM的UTF8”调用 应用于打开的ANSI文件

我检查了上面的内容,而不是检查它的作者

然后我开始编写Python脚本,如下所示

#!/usr/bin/python
# -*- coding: utf-8 -*-

我很困惑,因为我在记事本++上看到了“在ANSI中编码”选项。那么从HTML页面上刮下的来自BeautifulSoup的字符串呢?它们可能并不总是utf-8。顺便问一下,Alex,你通常使用什么编辑器?@grokker:“ANSI”实际上有两种含义在文本上下文中。一个是一组用于终端控制的转义序列。在DOS/Windows世界中,还有一个字符集,毫无理由被称为“ANSI”。今天它实际上是Windows-1252(),它几乎是但不完全是ISO拉丁语-1集(尽管它并不总是这样)。这可能就是记事本++所指的。@Nicholas:“ANSI”字符集是cp125x for x在范围(9)内的标准Windows(非DOS)行话,并随区域设置而变化;它不仅仅是cp1252。什么