2

わかりました、私はこのように宣言するハードコードされた文字列を持っています

name = u"Par Catégorie"

# - -coding: utf-8 - - マジック ヘッダーがあるので、utf-8 に変換されていると思います

途中でxmlに出力されます

xml_output.toprettyxml(indent='....', encoding='utf-8')

そして、私は

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 3: ordinal not in range(128)

私のデータのほとんどはフランス語であり、CDATA ノードで正しく出力されますが、その 1 つのハードコードされた文字列は保持されます... ascii コーデックが呼び出される理由がわかりません。

どうしたの ?

4

2 に答える 2

4

ソースファイルのヘッダーは、ソースcodingがどのエンコーディングであるかをPythonに通知します。これは、PythonがUnicode文字列リテラル( )のソースをUnicodeオブジェクトにデコードするために使用するエンコーディングです。Unicodeオブジェクト自体にはエンコーディングがありません。生のUnicodeデータです。(内部的には、Pythonは構成方法に応じて、2つのエンコーディングのいずれかを使用しますが、Pythonコードはそれについて心配する必要はありません。)u"Par Catégorie"

取得したUnicodeDecodeErrorは、どこかでユニコード文字列とバイト文字列(通常の文字列)を混合していることを意味します。それらを混合する場合(連結、文字列補間の実行など)、Pythonは、デフォルトのエンコーディング、ASCII。バイト文字列に非ASCIIデータが含まれている場合、これは失敗し、表示されるエラーが発生します。実行されている操作はどこかのライブラリにある可能性がありますが、それでも異なるタイプの入力を混合していることを意味します。

残念ながら、バイト文字列にASCIIデータだけが含まれている限り、問題なく機能するという事実は、このタイプのエラーがライブラリコードでも頻繁に発生することを意味します。strPython 3.xは、Unicode文字列( 3.xだけ)とバイト文字列(3.xのbytesタイプ)の間の暗黙の変換を取り除くことで、この問題を解決します。

于 2010-04-12T21:41:28.427 に答える
1

パラメータ名が間違っていますか?ドキュメントから、キーワード引数名​​はであるはずでありencoding、ではないことがわかりcodingます。

于 2010-04-12T20:54:56.913 に答える