Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ASCII编解码器可以';t编码字符u'\u2013';_Python_Unicode - Fatal编程技术网

Python ASCII编解码器可以';t编码字符u'\u2013';

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());

我在Q_GIS中有一个打开对象的小Python代码。我的问题是目录中有一个无法编码的字符(类似下划线的字符)。错误是:

回溯(最近一次调用):文件“”,第1行,在 UnicodeEncodeError:“ascii”编解码器无法在中对字符u'\u2013'进行编码 位置10:序号不在范围内(128)

我的小代码是:

from os import startfile; 
proj = QgsProject.instance(); 
UriFile = str(proj.fileName()); 
img = '[% "pad" %]'; 
Path = str(os.path.dirname(UriFile)); 
startfile(Path+img)
由于我的编程技能不高,我请求您帮助我在这段小代码中添加一些代码来解决这个问题。

我假设:

  • 您正在使用Python2版本
  • QgsProject.instance().fileName()
    是一个unicode字符串,包含一个EN-破折号(unicode字符U+2013:-),它看起来像一个普通破折号(unicode字符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')
我假设:

  • 您正在使用Python2版本
  • QgsProject.instance().fileName()
    是一个unicode字符串,包含一个EN-破折号(unicode字符U+2013:-),它看起来像一个普通破折号(unicode字符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')

谢谢你的回答

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