【问题标题】:Python - character encoding and decoding problemsPython - 字符编码和解码问题
【发布时间】:2012-03-26 11:33:45
【问题描述】:
  • 我有 1 个带有 utf-8 字符(名称)的源文件
  • 我有 1 个具有相同字符编码的输出文件。
  • 我正在处理一个 html 页面,粘贴和剪切有用的 供我归档的信息。
  • 我在“friendsNames”txt 文件中使用“éáűúőóüöäđĐ”字符。

我给出了这个错误:

Traceback (most recent call last):
  File "C:\Users\Rendszergazda\workspace\achievements\hiba.py", line 9, in <module>
    s = str(urlopen("http://eu.battle.net/wow/en/character/arathor/"+str(names[0])+"/achievement").read(), encoding='utf-8')
  File "C:\Python27\lib\encodings\cp1250.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character u'\ufeff' in position 0: character maps to <undefined>

你怎么看?我的问题是什么?

from urllib import urlopen
import codecs

result = codecs.open("C:\Users\Desktop\Achievements\Result.txt", "a", "utf-8")
fh = codecs.open("C:\Users\Desktop\Achievements\FriendsNames.txt", "r", "utf-8")
line = fh.readline()
names = line.split(" ")
fh.close()

s = urlopen("http://eu.battle.net/wow/en/character/arathor/"+str(names[0])+"/achievement").read(), encoding='utf8')
result.write(str(s))
result.close()

【问题讨论】:

  • 仅供参考:字符0xfeffBOM。此外,您的错误消息和您的代码示例不匹配。
  • 如果你想进一步了解unicode,我强烈推荐bit.ly/unipain

标签: python utf-8 character-encoding codec urlopen


【解决方案1】:

您遇到的问题是您正在调用str(array[0]),其中array[0] 是一个unicode 字符串。这意味着它将以默认编码进行编码,出于某种原因,在您的情况下似乎是cp1250。 (你惹sys.setdefaultencoding()了吗?不要那样做。)

要从 unicode 中获取字节串,您应该明确地encode unicode。不要只打电话给str()。使用结果应该具有的编码对其进行编码(在 URL 的情况下有点难以猜测,但在这种情况下可能是 UTF-8。)所以,使用 `array[0].encode('utf-8' )'。您可能还需要在 URL 中引用非 ASCII 字符,但这取决于远程端的期望。

【讨论】:

  • 但是我提出了一个新问题,在 utf-8 xy.write "eat" my "\n" 中,我尝试了这个:u"\u000A" (utf- 8个新行),但它不起作用:(
  • 恐怕我不明白这个问题。 u"\u00A" 和 u"\n" 是一回事,它是 unicode,而不是 UTF-8。 (请参阅bit.ly/unipain。)我建议您发布一个新问题来描述您当前的问题。
  • 您可能在 Windows 上并尝试使用记事本或其他工具打开您的输出。记事本只能理解 \r\n,但 Word 和 Wordpad 会很好地显示您的文件。
猜你喜欢
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 2014-07-16
  • 2017-10-05
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
相关资源
最近更新 更多