首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASCII编解码器不能对u'\u2013‘进行编码

ASCII编解码器不能对u'\u2013‘进行编码
EN

Stack Overflow用户
提问于 2016-10-14 09:07:06
回答 3查看 18.7K关注 0票数 1

我在Q_GIS中有一个小Python代码,它打开对象。我遇到的问题是,目录中有一个不能编码的字符(下划线类似字符)。错误是:

回溯(最近一次调用):File "",第1行,在UnicodeEncodeError:'ascii‘编解码器不能编码字符u’\u 2013‘位置10:序号不在范围(128)

我的小密码是:

代码语言:javascript
运行
复制
from os import startfile; 
proj = QgsProject.instance(); 
UriFile = str(proj.fileName()); 
img = '[% "pad" %]'; 
Path = str(os.path.dirname(UriFile)); 
startfile(Path+img)

由于我的一些编程技巧,我请求您帮助我在这个小代码中添加一些代码,以克服这个问题。

EN

回答 3

Stack Overflow用户

发布于 2016-10-14 13:17:33

我想:

  • 您使用的是Python2版本
  • QgsProject.instance().fileName()是一个包含n-破折号(Unicode char U+2013:-)的unicode字符串,它看起来像普通的破折号(Unicode char U+2D:-),但在ASCII中或在任何常见的8位字符集中都不存在。

然后错误就正常了:在Python2中,unicode字符串到普通8位字符串的转换使用ASCII字符集。

解决办法:

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

代码语言:javascript
运行
复制
UriFile = proj.fileName().encode('ascii', 'replace')

至少你会看到冒犯的字符发生在哪里。

解决方案:

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

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

代码语言:javascript
运行
复制
UriFile = proj.fileName().encode('utf8')
票数 8
EN

Stack Overflow用户

发布于 2016-10-16 19:28:44

谢谢你的回答,

我已经找到了在python代码中用unicode替换str的答案,请参阅下面的代码。

代码语言:javascript
运行
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2019-10-11 09:45:23

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

OBJECT.encode('ascii',‘忽略’)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40039212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档