私はPython 3.5を使用していますが、特殊な中国語の文字が含まれている場合と含まれていない可能性があるバイトテキストのブロックを取得しようとしています。中国語の文字は含まれていませんが、漢字は壊れてしまいます。中国語の文字は常に人の名前であり、常にその名前の英語のスペルに加えてあります。テキストはJSON形式ですので、ロードする前にデコードする必要があります。デコードはうまくいくように見えますが、私にエラーはありません。私がしようとすると、ファイルにデコードされたテキストを書き込むとき、それは私に次のエラーメッセージが得られます。ここでは中国語の文字のPythonデコードの問題
UnicodeEncodeError: 'charmap' codec can't encode characters in position 14-18: character maps to undefined
を、私はそれに何かをする前に私が得る生データの例である:
b' "isBulkRecipient": "false",\r\n "name": "Name in, English \xef'
b'\xab\x62\xb6\xe2\x15\x8a\x8b\x8a\xee\xab\x89\xcf\xbc\x8a",\r\n
recipientData = json.loads(recipientContent.decode('utf-8', 'ignore'))
recipientName = recipientData['signers'][0]['name']
pprint(recipientName)
with open('envelope recipient list.csv', 'a', newline='') as fp:
a = csv.writer(fp, delimiter=',')
csvData = [[recipientName]]
a.writerows(csvData)
recipientContent
は、APIの呼び出しから取得されます。
は、ここで私が使用していたコードです。出力ファイルに漢字を入れる必要はありません。アドバイスをいただければ幸いです!
更新:
私は壊し、各エントリのためのいくつかの手動の回避策をやって、そして中国の特殊文字が含まれていなかった他のエントリを来たが、他の言語からそれらを持っていた、とのようなプログラムを壊してきましたよく特殊文字は、名前フィールドにのみあります。だから、名前は "Ałex"のようなもので、通常の文字と特殊文字が混在しています。私はこの情報を含む文字列をデコードする前に、私はそれを画面に印刷することができます。このように見えます:b'name": "A\xc5ex",\r\n
しかし、私はそれをutf-8にデコードしてから、それ。エラーメッセージは次のとおりです。UnicodeEncodeError: 'charmap' codec can't encode character 'u0142' in position 2- character maps to -undefined-
私は\ u0142が何であったかを調べ、それは特殊文字です。
例文字列はUTF-8(も共通の中国のマルチバイトのいずれかであることが表示されません。エンコード)。あなたはそれがUTF-8でエンコードされていると確信していますか? – univerio
'Content-Type'をチェックする必要があります。もしそれが 'application/json; charset = utf-16'、 'utf-16'を使います。 'application/json'のデフォルトは' utf-8'です –
Webサービスがデータを取得してもそれがうまく文書化されていないので、私はそのutf-8を100%確信していませんが、 utf-16を含むさまざまなエンコードタイプ私はそれに漢字が含まれていると確信しています。 –