簡體   English   中英

轉換html實體和編碼的問題

[英]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字符集)。 這似乎沒有發生在您的函數中,但是在嘗試將結果字符串打印到控制台時可能會發生。 我對輸入字符串"&#xae; some text"進行了快速測試,並在打印結果字符串時能夠重現失敗:

print unescape("&#xae; some text")

您可以通過指定要將Unicode字符串轉換為的編碼來避免這種情況:

print unescape("&#xae; 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.

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