Python ASCII编解码器可以';t编码字符u'\u2013';
我在Q_GIS中有一个打开对象的小Python代码。我的问题是目录中有一个无法编码的字符(类似下划线的字符)。错误是: 回溯(最近一次调用):文件“”,第1行,在 UnicodeEncodeError:“ascii”编解码器无法在中对字符u'\u2013'进行编码 位置10:序号不在范围内(128) 我的小代码是:Python ASCII编解码器可以';t编码字符u'\u2013';,python,unicode,Python,Unicode,我在Q_GIS中有一个打开对象的小Python代码。我的问题是目录中有一个无法编码的字符(类似下划线的字符)。错误是: 回溯(最近一次调用):文件“”,第1行,在 UnicodeEncodeError:“ascii”编解码器无法在中对字符u'\u2013'进行编码 位置10:序号不在范围内(128) 我的小代码是: from os import startfile; proj = QgsProject.instance(); UriFile = str(proj.fileName());
from os import startfile;
proj = QgsProject.instance();
UriFile = str(proj.fileName());
img = '[% "pad" %]';
Path = str(os.path.dirname(UriFile));
startfile(Path+img)
由于我的编程技能不高,我请求您帮助我在这段小代码中添加一些代码来解决这个问题。我假设:
- 您正在使用Python2版本
是一个unicode字符串,包含一个EN-破折号(unicode字符U+2013:-),它看起来像一个普通破折号(unicode字符U+2D:-),但不存在于ASCII或任何常见的8位字符集中QgsProject.instance().fileName()
您可以使用显式编码,要求对未映射的字符使用替换字符:
UriFile = proj.fileName().encode('ascii', 'replace')
至少你会看到冒犯的角色出现在哪里
解决方案:
您应该使用完整的unicode处理(并使用Python3),或者确保所有处理的字符串都可以在当前字符集中表示(通常是latin1)
或者,如果在您的用例中有意义,您可以尝试使用UTF8编码,它可以成功地以1、2或3个字节表示任何UNICODE字符:
UriFile = proj.fileName().encode('utf8')
我假设:
- 您正在使用Python2版本
是一个unicode字符串,包含一个EN-破折号(unicode字符U+2013:-),它看起来像一个普通破折号(unicode字符U+2D:-),但不存在于ASCII或任何常见的8位字符集中QgsProject.instance().fileName()
您可以使用显式编码,要求对未映射的字符使用替换字符:
UriFile = proj.fileName().encode('ascii', 'replace')
至少你会看到冒犯的角色出现在哪里
解决方案:
您应该使用完整的unicode处理(并使用Python3),或者确保所有处理的字符串都可以在当前字符集中表示(通常是latin1)
或者,如果在您的用例中有意义,您可以尝试使用UTF8编码,它可以成功地以1、2或3个字节表示任何UNICODE字符:
UriFile = proj.fileName().encode('utf8')
谢谢你的回答 我在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)
谢谢你的回答 我在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)
经过一番搜寻,我找不到一条路,但这样我就可以忽略它了
对象
.encode('ascii','ignore')经过大量搜索,我找不到一种方法,但通过这种方法,我可以忽略它
对象
.encode('ascii','ignore')