簡體   English   中英

'ascii'編解碼器無法編碼字符u'\\ xe9'

[英]'ascii' codec can't encode character u'\xe9'

我已經嘗試過所有以前的答案和解決方案。

我正在嘗試使用此值,這給了我編碼相關的錯誤。

ar = [u'http://dbpedia.org/resource/Anne_Hathaway', u'http://dbpedia.org/resource/Jodie_Bain', u'http://dbpedia.org/resource/Wendy_Divine', u'http://dbpedia.org/resource/Jos\xe9_El\xedas_Moreno', u'http://dbpedia.org/resource/Baaba_Maal']

所以我嘗試了

d = [x.decode('utf-8') for x in ar]

這使:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 31: ordinal not in range(128)

我嘗試了

 d = [x.encode('utf-8') for x in ar]

可以消除錯誤,但可以更改原始內容

原始值為u'http://dbpedia.org/resource/Jos\\xe9_El\\xedas_Moreno' ,在使用encode轉換為'http://dbpedia.org/resource/Jos\\xc3\\xa9_El\\xc3\\xadas_Moreno'

解決這種情況的正確方法是什么?

編輯

輸入這些鏈接時出現錯誤

req = urllib2.Request()

字符串的第二個版本是原始unicode字符串的正確utf-8表示形式。 如果要進行有意義的比較,則必須對存儲的字符串和用戶輸入的字符串使用相同的表示形式。 這樣做的明智選擇是始終在內部(在您的代碼中)使用Unicode字符串,並確保用戶輸入和存儲的字符串均已正確解碼,以便在系統邊界(存儲子系統和用戶輸入子系統)從其各自的編碼進行unicode編碼。 。

另外你似乎有點困惑的Unicode和編碼,所以閱讀可能會有幫助。

python中的Unicode strings"raw" unicode ,因此請確保適當地使用.encode().decode() 在世界各地的多個開發人員小組中,使用utf8編碼被認為是最佳實踐。 要進行編碼,請使用urllib2庫中的quote函數:

from urllib2 import quote
escaped_string = quote(unicode_string.encode('utf-8'))

要解碼,請使用unquote

from urllib2 import unquote
src = "http://dbpedia.org/resource/Jos\xc3\xa9_El\xc3\xadas_Moreno"
unicode_string = unquote(src).decode('utf-8')

另外,如果您對Unicode和UTF-8工作更感興趣,請查看Unicode HOWTO

在您的Unicode列表中, u'http://dbpedia.org/resource/Jos\\xe9_El\\xedas_Moreno'是表示Unicode字符串的ASCII安全方法。 當以支持完整的西歐字符集的格式(例如UTF-8)進行編碼時,它是: http://dbpedia.org/resource/José_Elías_Moreno : http://dbpedia.org/resource/José_Elías_Moreno

您的.encode("UTF-8")是正確的,並且在UTF-8編輯器或瀏覽器中看起來還可以。 編碼后看到的是UTF-8的ASCII安全表示。

例如,您的麻煩字符是é和í。

é = 00E9 Unicode = C3A9 UTF-8
í = 00ED Unicode = C3AD UTF-8

簡而言之,您的.encode()方法是正確的,應該用於寫入文件或瀏覽器。

暫無
暫無

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

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