[英]issue with converting html entities and encoding
我正在使用此功能來轉義HTML實體
import re, htmlentitydefs
##
# Removes HTML or XML character references and entities from a text string.
#
# @param text The HTML (or XML) source text.
# @return The plain text, as a Unicode string, if necessary.
def unescape(text):
def fixup(m):
text = m.group(0)
if text[:2] == "&#":
# character reference
try:
if text[:3] == "&#x":
return unichr(int(text[3:-1], 16))
else:
return unichr(int(text[2:-1]))
except ValueError:
pass
else:
# named entity
try:
text = unichr(htmlentitydefs.name2codepoint[text[1:-1]])
except KeyError:
pass
return text # leave as is
return re.sub("&#?\w+;", fixup, text)
但是當我嘗試處理一些文本時出現此錯誤,(大多數文本有效)但是python拋出了此錯誤
File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\xae' in position 3
48: character maps to <undefined>
我已經嘗試過以一百萬種不同的方式對文本字符串進行編碼,到目前為止,ascii,utf,unicode都無法正常工作……我真的不理解所有這些東西
根據錯誤消息,您似乎正在嘗試將Unicode字符串轉換為CP 437(IBM PC字符集)。 這似乎沒有發生在您的函數中,但是在嘗試將結果字符串打印到控制台時可能會發生。 我對輸入字符串"® some text"
進行了快速測試,並在打印結果字符串時能夠重現失敗:
print unescape("® some text")
您可以通過指定要將Unicode字符串轉換為的編碼來避免這種情況:
print unescape("® some text").encode('utf-8')
如果嘗試將此字符串打印到控制台,則會看到非ascii字符,但是,如果將其寫入文件並在支持utf-8編碼文檔的查看器中閱讀,則應該看到所需的字符。
您需要使用編碼方法轉換結果,例如,應用像'utf-8'這樣的編碼。
strdata = (result).encode('utf-8')
print strdata
您需要發布FULL追溯,以便我們可以看到您的代碼中發生錯誤的位置。 您還需要向我們顯示repr(有此問題的小數據)-您的數據至少348字節長。
根據最初提供的信息:
您在嘗試使用cp437
編碼unicode
字符時cp437
……
(1)錯誤發生在您所顯示的代碼中的某處,並且有人將您的默認編碼cp437
認為是cp437
(不要這樣做)
或(2)您顯示給我們的代碼中的任何地方都沒有發生錯誤,當您嘗試打印函數的某些結果,在Windows“命令提示符”窗口中運行時,就發生了該錯誤,因此sys.stdout.encoding
設置為某些不支持U + 00AE字符的舊版MS-DOS編碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.