我正在嘗試向文件中寫入一些字符串(字符串已由HTML解析器BeautifulSoup提供給我)。寫入文件時出現UnicodeEncodeError
我可以使用「打印」,以顯示他們,但是當我使用file.write()我收到以下錯誤:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa3' in position 6: ordinal not in range(128)
我如何解析呢?
我正在嘗試向文件中寫入一些字符串(字符串已由HTML解析器BeautifulSoup提供給我)。寫入文件時出現UnicodeEncodeError
我可以使用「打印」,以顯示他們,但是當我使用file.write()我收到以下錯誤:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa3' in position 6: ordinal not in range(128)
我如何解析呢?
當您將包含非英文字符(超過128的Unicode字符)的Unicode字符串傳遞給需要ASCII字符串的內容時,會發生此錯誤。 Python字符串的默認編碼是ASCII,「它正好處理128個(英文)字符」。這就是爲什麼試圖將Unicode字符轉換爲128以上會產生錯誤。
Unicode的()
unicode(string[, encoding, errors])
構造具有簽名的unicode(字符串[,編碼,錯誤])。它的所有參數都應該是8位字符串。
第一個參數使用指定的編碼轉換爲Unicode; 如果離開關閉的編碼參數,該ASCII編碼用於轉化,所以字符大於127將作爲錯誤
例如待治療
s = u'La Pe\xf1a'
print s.encode('latin-1')
或
write(s.encode('latin-1'))
將使用拉丁文-1編碼
是,大約99.9%o經驗豐富的Python用戶之前已經看到過。
如果我在Google中鍵入'python unicode',我會得到約1400萬個結果;第一個是http://docs.python.org/howto/unicode.html官方文件,描述了極端細節的整體情況;第四個是http://farmdev.com/talks/unicode/,這是一個更實用的概述,它將大大提供給你一個答案,並確保你明白髮生了什麼。
你真的需要閱讀和理解這些類型的概述,無論他們看起來如何。真的沒有任何東西可以繞過它。文字很難。沒有「純文本」這樣的東西,多年來一直沒有合理的傳真,而且從來沒有真正存在過,儘管我們花了幾十年時間假裝它。但是Unicode至少是一個標準。您也應該閱讀http://www.joelonsoftware.com/articles/Unicode.html。
感謝您的鏈接!非常有幫助 – tatlar
您的問題的答案是「使用編解碼器」。附加的代碼還顯示了一些gettext魔法,FWIW。 http://wiki.wxpython.org/Internationalization
import codecs
import gettext
localedir = './locale'
langid = wx.LANGUAGE_DEFAULT # use OS default; or use LANGUAGE_JAPANESE, etc.
domain = "MyApp"
mylocale = wx.Locale(langid)
mylocale.AddCatalogLookupPathPrefix(localedir)
mylocale.AddCatalog(domain)
translater = gettext.translation(domain, localedir,
[mylocale.GetCanonicalName()], fallback = True)
translater.install(unicode = True)
# translater.install() installs the gettext _() translater function into our namespace...
msg = _("A message that gettext will translate, probably putting Unicode in here")
# use codecs.open() to convert Unicode strings to UTF8
Logfile = codecs.open(logfile_name, 'w', encoding='utf-8')
Logfile.write(msg + '\n')
儘管谷歌充滿命中在這個問題上,我發現它,而很難找到這種簡單的解決方案(它實際上是在有關Unicode Python文檔,而是安葬)。
所以... HTH ...
GAJ
「簡單」?這也顯示出OP不關心的一大堆i18n機器 - 他不是在試圖確保人們看到正確語言的文本,他試圖從特定源文件中獲取特定語言的文本並將其放入文件中。所以你剪下的唯一相關部分是第一行和最後兩行,真的。至於「很難找到」,真的嗎?你爲什麼Google?我試過'UnicodeEncodeError:'ascii'編解碼器不能編碼字符';結果似乎很有幫助... –
它的輸出字符串,如「123£」 – Rory
這不是有效的ASCII價格。英鎊符號是字符代碼163,在ASCII範圍127之外。 –
您必須指定一個可對這些字符進行編碼的編碼。文件不包含字符;它們包含字節。編碼將字符轉換爲字節。 –