如何保持编码字符的原样

时间:2012-04-27 21:21:32

标签: python html http httpwebrequest beautifulsoup

我使用python接收不同编码的Web响应,我的预期输出应该与网页上给出的相同

Ex:MarcBarbé

解析html响应后,最后一个字符应该保持不变。

目前我正在使用以下代码

unicode.join(u'\n',map(unicode,item))

在某些情况下,如果没有给出特殊编码,则会抛出以下错误: 例如:Markus Rygaard,Alberte Blichfeldt,Flemming Quist,Møller

Traceback (most recent call last):
  File "BFICrawl.py", line 20, in <module>
    print attrName + " : " + attrValue
  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'\xf8' in position 6
0: character maps to <undefined>

我真的无法找到相同的原因。是否有任何替代方法可用于从网络获取相同的编码内容。

2 个答案:

答案 0 :(得分:1)

Codepage 437(正在编码)不知道ø字符,因此无法对输出进行编码。错误消息确实说明了这一切。

所以问题是:为什么要尝试将字符串编码为DOS控制台窗口使用的代码页?

答案 1 :(得分:1)

您已成功从网络获取unicode个对象。你不应该做unicode.join(u'\n',map(unicode,item))之类的事情。当您尝试输出unicode时会发生此问题。

您正在Windows“命令提示符”窗口中运行脚本。脚本正在打印到控制台。控制台编码为cp437。这是一种非常有限的(8位)编码。它无法处理Møller中的第二个字符,以及一大堆其他字符

补救措施:在IDLE(随Python提供)或其他IDE中运行脚本。

或者,如果您要打印到控制台仅用于调试目的,而不是print foo使用print repr(foo)