我在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)
Run Code Online (Sandbox Code Playgroud)
由于我的编程技巧很少,因此请您帮助我在此小代码中添加一些代码以解决该问题。
我假设:
QgsProject.instance().fileName()
是包含EN-DASH(Unicode char U + 2013:–)的unicode字符串,它看起来像普通的破折号(Unicode char U + 2D:-),但不存在于ASCII或任何常见的8位字符集中。然后错误是正常的:在Python2中,将unicode字符串转换为纯8bits字符串使用ASCII字符集。
解决方法:
您可以使用显式编码,要求对未映射的字符使用替换字符:
UriFile = proj.fileName().encode('ascii', 'replace')
Run Code Online (Sandbox Code Playgroud)
至少您会看到有问题的字符出现在哪里。
解:
您应该使用完整的unicode处理(并使用Python3),或者确保所有处理的字符串在您当前的字符集中都是可表示的(通常是latin1)
另外,如果在您的用例中有意义,则可以尝试使用UTF8编码,该编码可以成功表示1、2或3个字节的任何UNICODE字符:
UriFile = proj.fileName().encode('utf8')
Run Code Online (Sandbox Code Playgroud)