我在Q_GIS中有一个小Python代码,它打开对象。我遇到的问题是,目录中有一个不能编码的字符(下划线类似字符)。错误是:
回溯(最近一次调用):File "",第1行,在UnicodeEncodeError:'ascii‘编解码器不能编码字符u’\u 2013‘位置10:序号不在范围(128)
我的小密码是:
from os import startfile;
proj = QgsProject.instance();
UriFile = str(proj.fileName());
img = '[% "pad" %]';
Path = str(os.path.dirname(UriFile));
startfile(Path+img)由于我的一些编程技巧,我请求您帮助我在这个小代码中添加一些代码,以克服这个问题。
发布于 2016-10-14 13:17:33
我想:
QgsProject.instance().fileName()是一个包含n-破折号(Unicode char U+2013:-)的unicode字符串,它看起来像普通的破折号(Unicode char U+2D:-),但在ASCII中或在任何常见的8位字符集中都不存在。然后错误就正常了:在Python2中,unicode字符串到普通8位字符串的转换使用ASCII字符集。
解决办法:
可以使用显式编码,要求对未映射的字符使用替换字符:
UriFile = proj.fileName().encode('ascii', 'replace')至少你会看到冒犯的字符发生在哪里。
解决方案:
您应该使用完整的unicode处理(并使用Python3),或者确保处理的所有字符串在当前字符集中都是可表示的(通常是latin1)。
或者,如果在用例中有意义,可以尝试使用UTF8编码,它可以成功地以1、2或3个字节表示任何UNICODE字符:
UriFile = proj.fileName().encode('utf8')发布于 2016-10-16 19:28:44
谢谢你的回答,
我已经找到了在python代码中用unicode替换str的答案,请参阅下面的代码。
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)发布于 2019-10-11 09:45:23
经过大量的搜索,我找不到办法,但这样我就可以忽略它。
OBJECT.encode('ascii',‘忽略’)
https://stackoverflow.com/questions/40039212
复制相似问题