ホームページ  >  記事  >  バックエンド開発  >  Python 2.7 が中国語の文字列を出力するときのエラーを解決するにはどうすればよいですか?

Python 2.7 が中国語の文字列を出力するときのエラーを解決するにはどうすればよいですか?

零下一度
零下一度オリジナル
2017-06-28 15:57:322874ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。