【问题标题】:How to keep encoded characters as is如何保持编码字符不变
【发布时间】:2012-04-28 06:29:52
【问题描述】:

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

例如:马克·巴贝

在解析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>

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

【问题讨论】:

  • 请发布您的操作系统和版本,因为这也可能取决于您运行的终端和操作系统。

标签: python html http httpwebrequest beautifulsoup


【解决方案1】:

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

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

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

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

【讨论】:

  • 有人知道为什么 Phantom Anonymous Drive-by Downvoter 不喜欢我的回答吗?
  • 不知道,因为我自己认为这是一个不错的答案。 +1。
【解决方案2】:

Codepage 437(正在被编码)不知道ø 字符,因此您的字符串无法被编码为输出。错误消息确实说明了所有这些。

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

【讨论】:

  • 他没有(有意识地)尝试这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多