Python 2.7が中国語の文字列を出力するときのエンコーディングの問題
「UnicodeEncodeError: 'ascii' codec can't encodecharacters in Position 0-1: ordinal not in range(128)」というエラーが表示されるのはなぜですか?この記事ではこの問題について検討します。
Python の文字列の内部表現は Unicode エンコードであるため、エンコード変換を行う場合は、通常、中間エンコードとして Unicode を使用する必要があります。つまり、最初に他のエンコードの文字列を Unicode にデコード (デコード) してから、エンコード変換を行う必要があります。それらを Unicode から別のエンコーディングにエンコードします (encode)。
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であるかどうかを判定するために使用されます
非を使用してください。 str を Unicode エンコード形式でエンコードすると、エラーが報告されます
システムのデフォルトのエンコードを取得するにはどうすればよいですか?
#!/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.__class__ を使用して str のエンコード形式を表示します
原則について話した後長い間、ついに万能薬を考え出しましょう:)
#!/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')
以上がPython 2.7 が中国語の文字列を出力するときのエラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。