我在Q_GIS中有一些Python代码可以打开对象 . 我遇到的问题是在目录中有一个无法编码的字符(下划线像字符) . 错误是:
回溯(最近一次调用最后一次):文件“”,第1行,在UnicodeEncodeError中:'ascii'编解码器无法对位置10中的字符u'\ u2013'进行编码:序数不在范围内(128)
我的小代码是:
from os import startfile;
proj = QgsProject.instance();
UriFile = str(proj.fileName());
img = '[% "pad" %]';
Path = str(os.path.dirname(UriFile));
startfile(Path+img)
由于我的编程技巧很少,我请你帮我在这个小代码中添加一些代码来克服这个问题 .
2 回答
我假设:
您使用的是Python2版本
QgsProject.instance().fileName()
是一个包含EN-DASH的Unicode字符串(Unicode char U 2013: - ),它看起来像普通的短划线(Unicode char U 2D: - ),但在ASCII或任何常见的8位字符集中都不存在 .然后错误正常:在Python2中,unicode字符串转换为普通的8bits字符串使用ASCII字符集 .
解决方法:
您可以使用显式编码,要求对未映射的字符使用替换字符:
至少你会看到有问题的角色出现在哪里 .
解:
您应该使用完整的unicode处理(并使用Python3)或确保所有处理的字符串都可以在您当前的字符集中表示(通常是latin1)
或者,如果在您的用例中有意义,您可以尝试使用UTF8编码,该编码可以成功表示1,2或3个字节中的任何UNICODE字符:
谢谢你的回答,
我在python代码中找到了用unicode替换str的答案,请参阅下面的代码 .