Python——字符编码和解码问题

标签 python utf-8 character-encoding codec urlopen

  • 我有 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()

最佳答案

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

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

关于Python——字符编码和解码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9871346/

相关文章:

Python:如何根据其他列的条件选择 Pandas 行?

python - Spotify Web API 经常给出 500 错误

python - 在 x 轴 Pandas Matplotlib 中处理日期

python - 如何在 Python 中打破这条长线?

MySQL 输出十六进制字符串为 UTF-8

image - 是否有纯 ASCII 图像文件?

javascript - 作为纯文本加载的脚本 - 未声明纯文本文档的字符编码。

php - 如何在 php 中打印 ñ

python - Tornado x-www-form-urlencoded 主体无效 : 'latin-1' codec can't encode characters in position 774-777: ordinal not in range(256)

Android:字符编码原始资源文件