ホームページ  >  記事  >  バックエンド開発  >  Pythonの中国語コードが文字化けする

Pythonの中国語コードが文字化けする

巴扎黑
巴扎黑オリジナル
2016-12-07 10:41:191172ブラウズ

私はPythonスクリプトに触れ始めたのですが、始めてすぐに中国語の文字化けの問題に遭遇しました。

インターネット上の情報と組み合わせて要約すると、次のとおりです。

Python の文字列の内部表現は Unicode エンコーディングであるため、エンコーディング変換を行う場合、通常は中間エンコーディングとして Unicode を使用する必要があります。つまり、最初に他のエンコーディングの文字列を変換し、デコードして Unicode に変換し、次に Unicode から別のエンコーディングにエンコードします。

decode デコード。この関数は、str1.decode('gb2312') など、他のエンコードされた文字列を Unicode エンコードに変換することです。これは、gb2312 でエンコードされた文字列 str1 を Unicode エンコードに変換することを意味します。

エンコード エンコード。この機能は、Unicode エンコードを str2.encode('gb2312') などの他のエンコード文字列に変換することです。これは、Unicode エンコード文字列 str2 を gb2312 エンコードに変換することを意味します。

文字列がすでに Unicode である場合、デコード時にエラーが発生するため、通常はそのエンコード方法が Unicode であるかどうかを判断する必要があります:

isinstance(s, unicode) #Unicode かどうかを判断するために使用されます

非 Unicode エンコード形式で str を使用してエンコードするとエラーが発生します

システムのデフォルトのエンコードを取得するにはどうすればよいですか?

#!/usr/bin/python

#coding=utf-8

import sys

print sys.getdefaultencoding()

英語版 WindowsXP でのこのプログラムの出力は次のとおりです: ascii

一部の IDE では、文字列の出力が常に文字化けしたり、エラーになったりすることがあります。実際、これはプログラム自体の問題ではなく、IDE の結果出力コンソール自体が文字列のエンコーディングを表示できないことが原因です。

UliPad で次のコードを実行すると:

s=u"中国語" #Unicode エンコードを指定する

print s

がプロンプトを表示します: UnicodeEncodeError: 'ascii' codec can't encodecharacters in Position 0-1: ordinal範囲内にありません(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__ を使用します

原則 話した後長い間、私は次のコードを思いつきました:

#coding=utf-8

#!/usr/bin/python

s="中文"

if isinstance(s, unicode) :

print s .encode('gb2312')

else:

print s.decode('utf-8').encode('gb2312')


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