2
  • utf-8 文字 (名前) を含む 1 つのソース ファイルがあります。
  • 同じ文字エンコーディングのファイルを 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()
4

1 に答える 1

2

あなたが抱えている問題は、 を呼び出していることですstr(array[0])array[0]はユニコード文字列です。これは、デフォルトのエンコーディングでエンコードされることを意味します。これは、何らかの理由でcp1250. (いじりましたsys.setdefaultencoding()か? そうしないでください。)

Unicode からバイト文字列を取得するには、Unicode を明示的にエンコードする必要があります。それを呼び出すだけではありませんstr()。結果が持つべきエンコーディングを使用してエンコードします (URL の場合は推測がやや難しいですが、この場合はおそらく UTF-8 です)。 )」。URL 内の非 ASCII 文字を引用符で囲む必要がある場合もありますが、それはリモート エンドが何を期待するかによって異なります。

于 2012-03-26T11:44:58.387 に答える