我知道这不是一个罕见的问题,而且已经有多个SO问题回答了(1,2,3),但是即使在遵循那里的建议时,我仍然看到这个错误(对于下面的代码):
uri_name = u"%s_%s" % (name[1].encode('utf-8').strip(), name[0].encode('utf-8').strip())
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128)
因此,我试图从艺术家姓名列表中获取一个url,其中很多都有重音符号和类似于这样的欧洲字符(他们的名字也通过repr
打印出来):
Auberjonois, René -> Auberjonois, Ren\xc3\xa9
Bäumer, Eduard -> B\xc3\xa4umer, Eduard
Baur-Nütten, Gisela -> Baur-N\xc3\xbctten, Gisela
Bösken, Lorenz -> B\xc3\xb6sken, Lorenz
Čapek, Josef -> \xc4\x8capek, Josef
Großmann, Rudolf -> Gro\xc3\x9fmann, Rudolf
我试图运行的块是:
^{pr2}$所以第一个工作并产生http://example.com/Non_Accent_Name
但第二种方法失败了,出现了上述错误。在
我在脚本的顶部添加了# coding=utf-8
,并尝试在过程中的每一点对artist_name
字符串进行编码,但每次都得到相同的错误。在
如果重要的话,我使用Atom作为文本编辑器,当我打开这些名称的来源.csv文件时,重音符号都会正确显示。在
我还能做些什么来确保脚本将UTF-8解释为UTF-8而不是ascii?在
正如我在print语句中看到的,您使用的是python2.x,这意味着您应该通过
\u
符号来定义unicode字符,或者对字符串使用u
前缀。所以,把你的线路改成而且看起来你不需要。在拆分后为你的部件编码-它已经是unicode了
停止使用UTF-8。在任何地方使用
unicode
,并且只在接口处解码/编码(如果需要)。在相关问题 更多 >
编程相关推荐