Python字符编码欧洲口音

2024-06-28 09:47:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这不是一个罕见的问题,而且已经有多个SO问题回答了(123),但是即使在遵循那里的建议时,我仍然看到这个错误(对于下面的代码):

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?在


Tags: namein错误asciiutfencodestrip重音符号
2条回答

正如我在print语句中看到的,您使用的是python2.x,这意味着您应该通过\u符号来定义unicode字符,或者对字符串使用u前缀。所以,把你的线路改成

create_uri(u'Auberjonois, René') # note the u''

而且看起来你不需要。在拆分后为你的部件编码-它已经是unicode了

停止使用UTF-8。在任何地方使用unicode,并且只在接口处解码/编码(如果需要)。在

def create_uri(artist_name):
  name = artist_name.split(u",")
  uri_name = u"%s_%s" % (name[1].strip(), name[0].strip())
  uri = u'http://example.com/' + uri_name
  print uri

create_uri(u'Name, Non_Accent')
create_uri(u'Auberjonois, René')

相关问题 更多 >