簡體   English   中英

ASCII編解碼器無法編碼字符u'\\ u2013'

[英]ASCII codec can't encode character u'\u2013'

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

由於我的編程技巧很少,因此請您幫助我在此小代碼中添加一些代碼以解決該問題。

我假設:

  • 您正在使用Python2版本
  • QgsProject.instance().fileName()是包含EN-DASH(Unicode char U + 2013 QgsProject.instance().fileName()的Unicode字符串,它看起來像普通的破折號(Unicode char U + 2D:-),但在ASCII中也不存在任何常見的8位字符集。

那么錯誤是正常的:在Python2中,將unicode字符串轉換為純8bits字符串使用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)

經過大量搜索之后,我找不到方法,但是我可以忽略它

OBJECT .encode('ascii','ignore')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM