ASCII编码解码器无法编码字符u'\u2013'

2024-05-18 23:32:41 发布

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

我在qu-GIS中有一个小Python代码,可以打开对象。我遇到的问题是目录中有一个字符(类似下划线的字符)无法编码。错误是:

Traceback (most recent call last): File "", line 1, in UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 10: ordinal not in range(128)

我的小密码是:

from os import startfile; 
proj = QgsProject.instance(); 
UriFile = str(proj.fileName()); 
img = '[% "pad" %]'; 
Path = str(os.path.dirname(UriFile)); 
startfile(Path+img)

由于我的编程技巧很小,我请你帮我在这个小代码中添加一些代码来克服这个问题。


Tags: path对象代码in目录编码imgos
3条回答

经过大量的搜索,我找不到办法,但通过这个我可以忽略它

OBJECT.encode('ascii','ignore')

谢谢你的回答

我在python代码中将str替换为unicode中找到了答案,请参见下面的代码。

from os import startfile; 
proj = QgsProject.instance();
UriFile = unicode(proj.fileName()); 
img = '[% "pad" %]'; 
Path = unicode(os.path.dirname(UriFile)); 
startfile(Path+img)

from os import startfile; 
proj = QgsProject.instance();
UriFile = unicode(proj.fileName()); 
img = '[% "pad" %]'; 
Path = unicode(os.path.dirname(UriFile)); 
startfile(Path+img)

我假设:

  • 你用的是Python2版本
  • QgsProject.instance().fileName()是一个unicode字符串,包含一个EN-DASH(unicode char U+2013:–)它看起来像一个普通的破折号(unicode char U+2D:-),但它不存在于ASCII或任何通用的8bit字符集中。

这个错误是正常的:在Python2中,unicode字符串到普通的8bit字符串的转换使用ASCII字符集。

解决方法:
可以使用显式编码,要求对未映射的字符使用替换字符:

UriFile = proj.fileName().encode('ascii', 'replace')

至少你会看到冒犯的角色发生在哪里。

解决方案:

您应该使用完整的unicode处理(并使用Python3),或者确保处理的所有字符串都可以在当前字符集中表示(通常是latin1)

或者,如果在您的用例中有意义,您可以尝试使用UTF8编码,它可以成功地以1、2或3字节表示任何UNICODE字符:

UriFile = proj.fileName().encode('utf8')

相关问题 更多 >

    热门问题