Python 我无法将我的字符串设置为utf-8编码

Python 我无法将我的字符串设置为utf-8编码,python,unicode,Python,Unicode,我有一组将被收集的字符串,其中一些带有重音符号(例如é)。 我希望创建一个版本的每个与基本的ascii字母品种(为URL)。 我发现了很多类似问题的其他例子,我可以让它像这样工作: from unidecode import unidecode unidecode(u"Café") from_google_doc = "Café" a = unicode(fromgoogledoc,'utf-8') from_google_doc = "Caf\x82" 然而,我有兴趣将其应用于一组字符串

我有一组将被收集的字符串,其中一些带有重音符号(例如
é
)。 我希望创建一个版本的每个与基本的ascii字母品种(为URL)。 我发现了很多类似问题的其他例子,我可以让它像这样工作:

from unidecode import unidecode
unidecode(u"Café")
from_google_doc = "Café"
a = unicode(fromgoogledoc,'utf-8')
from_google_doc = "Caf\x82"
然而,我有兴趣将其应用于一组字符串,这些字符串取自csv/googledoc/类似文件

在本例中,我假定的操作过程是声明它们是unicode格式的,如下所示:

from unidecode import unidecode
unidecode(u"Café")
from_google_doc = "Café"
a = unicode(fromgoogledoc,'utf-8')
from_google_doc = "Caf\x82"
但是,这会返回一个错误,utf8无法解码位置3处的字节0x82

我试过这个:

a = unicode("Café",'iso-8859-1')
但是,当传递给unidecode时,它可以工作,切掉
é


抱歉,如果这是最基本的,我的研究/修修补补让我一事无成。。。我对Python相当陌生,对编码也比较新

使用
-*-coding:…
头()定义源文件的编码

然后,实际使用该编码(在编辑器中)。在Python 2中,使用

from __future__ import unicode_literals
然后呢,

from_google_doc = "Café"

实际上已经是unicode类型。

您需要找出用于生成正在解析的输入文件的编解码器

所有8位数据(包括文件和网络流)都必须使用某种形式的编码,以将人类语言压缩到所用计算机格式的限制中。您的数据也进行了编码,只是没有使用UTF-8或ISO-8859-1(拉丁语1)

您的UTF-8解码错误消息表明您在位置3处有一个十六进制字节82,因此让我们假设您的示例确实如下所示:

from unidecode import unidecode
unidecode(u"Café")
from_google_doc = "Café"
a = unicode(fromgoogledoc,'utf-8')
from_google_doc = "Caf\x82"
恰好在十六进制82处有
é
,因此上述代码清晰地解码为Unicode,并获得预期结果:

>>> from_google_doc = 'Caf\x82'
>>> print from_google_doc.decode('cp437')
Café
>>> from unidecode import unidecode
>>> unidecode(from_google_doc.decode('cp437'))
'Cafe'
但是如果没有关于源文档和相关元数据的更多详细信息,就无法判断使用的编解码器是否正确。首先,您的帖子中的信息太少,无法说明什么编解码器是正确的,还使用codepoint 82表示
é

编解码器无论如何都要根据具体情况来确定,因为它首先取决于您如何获取源数据,以及您如何检测所使用的编解码器

我敦促你阅读:

  • 乔尔斯波尔斯基

  • 内德·巴奇尔德


在继续之前,请充分了解编解码器的含义,以及它与Unicode的区别。

源文件的编码和/或从CSV/googledoc/whatever获取的字符串的编码是什么?这完全取决于原始文档使用的编码。如果您在UTF-8或ISO-8859-1中出现错误,那么这些都是错误的编解码器。我对这类问题的标准回答是指向,和。首先阅读这些内容,如果您还有其他问题,请返回<代码>'Caf\x82'。解码('cp437')打印
Caf
。顶部的编解码器仅适用于Python字符串文本…而在我的回答中,“Café”是Python字符串文本,不是吗?它告诉Python如何解码Python源文件,特别是在解释(unicode或字节)字符串文本时。但在解释外部源的编码时,这一点都没有帮助。我完全同意,但在他的问题中,开场白还使用了Python字符串文字。OP是指我有兴趣将其应用于一组字符串,这些字符串取自csv/googledoc/类似文件。感谢您的全面建议,真的很感谢-我稍后会有一个游戏,当我可以建立源代码的编码时会给你回电话-但这看起来很好,很有希望。再次感谢你的帮助-让一切都正常工作,结果显示输入是来自csv的拉丁语-1,来自命令行输入函数的是cp437。