ホームページ >バックエンド開発 >Python チュートリアル >文字化け・デコード時の文字化け問題の解決方法を詳しく解説
「UnicodeEncodeError: 'ascii' コーデックは position 0-1 の文字をエンコードできません: ordinal not in range(128)」というエラーが報告されるのはなぜですか?この記事ではこの問題について検討します。
Pythonの strings の内部表現は Unicode エンコードであるため、エンコード変換を行う場合は、通常、中間エンコードとして Unicode を使用する必要があります。つまり、最初に他のエンコードの文字列を Unicode にデコードしてから、 Encode unicode から別のエンコードに変換します。
decode の機能は、str1.decode('gb2312') など、他のエンコードされた文字列を Unicode エンコードに変換することです。これは、gb2312 でエンコードされた文字列 str1 を Unicode エンコードに変換することを意味します。
encode の機能は、Unicode エンコードを他のエンコードされた文字列 (str2.encode('gb2312') など) に変換することです。これは、Unicode エンコードされた文字列 str2 を gb2312 エンコードに変換することを意味します。
したがって、トランスコードするときは、まず文字列 str がどのようなエンコードであるかを理解してから、それを Unicode にデコードし、次に他のエンコードにエンコードする必要があります
コード内の文字列のデフォルトのエンコードは、コードのエンコードと一致しています。ファイル自体。
例: s='中国語'
utf8 ファイルにある場合、文字列は utf8 でエンコードされます。gb2312 ファイルにある場合、そのエンコードは gb2312 です。この場合、エンコード変換を行うには、まず decode メソッドを使用して Unicode エンコードに変換し、次に encode メソッドを使用して他のエンコードに変換する必要があります。通常、特定のエンコード方法が指定されていない場合は、システムのデフォルトのエンコードを使用して作成されたコード ファイルが使用されます。
文字列が次のように定義されている場合: s=u' Chinese'
文字列のエンコーディングは、コードファイル自体のエンコーディングに関係なく、Python の内部エンコーディングである Unicode として指定されます。したがって、この場合のエンコード変換は、encodeメソッドを直接使用して、指定したエンコードに変換するだけで済みます。
文字列がすでに Unicode である場合、デコード時にエラーが発生するため、通常はエンコード方法が Unicode であるかどうかを判断する必要があります:
isinstance(s, unicode) #用来判断是否为unicode
Unicode 以外のエンコード形式 str を使用してエンコードするとエラーが報告されます
方法システムのデフォルトのエンコーディングを取得するには?
#!/usr/bin/env python #coding=utf-8 import sys print sys.getdefaultencoding()
プログラム自体の問題ではなく、英語版 Windows でのこのプログラムの出力。
UliPad で次のコードを実行すると:
s=u"中文" print s
次のプロンプトが表示されます: UnicodeEncodeError: 'ascii' codec can't encodecharacters in Position 0-1: ordinal not in range(128).これは、英語版 Windows 上の UliPad のコンソール情報出力ウィンドウが原因です。
最後の文を print s.encode('gb2312') に変更します
「中国語」という単語は正しく出力できます。
最後の文を print s.encode('utf8')
に変更すると、出力は xe4xb8xadxe6x96x87 になります。これは、コンソール情報出力ウィンドウが ASCII エンコードに従って utf8 でエンコードされた文字列を出力した結果です。
unicode(str,'gb2312') は str.decode('gb2312') と同じで、どちらも gb2312 でエンコードされた str を Unicode エンコードに変換します
str のエンコード形式を表示するには str.
classを使用します 話した後この原理について長い間考えてきましたが、ついに万能薬を考え出しましょう:)
コードは次のとおりです:
#!/usr/bin/env python #coding=utf-8 s="中文" if isinstance(s, unicode): #s=u"中文" print s.encode('gb2312') else: #s="中文" print s.decode('utf-8').encode('gb2312')
以上が文字化け・デコード時の文字化け問題の解決方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。