ホームページ  >  記事  >  バックエンド開発  >  文字化け・デコード時の文字化け問題の解決方法を詳しく解説

文字化け・デコード時の文字化け問題の解決方法を詳しく解説

高洛峰
高洛峰オリジナル
2017-03-16 16:42:411738ブラウズ

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

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