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

Ahm*_*med 0 python unicode

我在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)

由于我的编程技巧很少,因此请您帮助我在此小代码中添加一些代码以解决该问题。

Ser*_*sta 7

我假设:

  • 您正在使用Python2版本
  • 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)