STR と UNICODE に関する優れた記事
Python コーディングに関連するコンテンツを整理します
注: 以下の説明は、ファイルやメッセージ、http パラメーターなどの取得に関するものです。
実行するとすぐに、文字化けが見つかります (文字列の処理、ファイルの読み取りと書き込み、印刷) そして、ほとんどの人が行うことは、文字化けが表示される理由を明確に考えずに、デバッグのためにエンコード/デコードを呼び出すことです
したがって、デバッグ時に最も一般的なエラーは次のとおりです。
エラー 1 トレースバック (最後の呼び出し): ファイル "
エラー 2
まず第一に
文字セットと文字エンコーディングを理解する必要があります
Unicode | WaitCharacterエンコードに関する注意点: ASCII、Unicode、UTF-8
淘宝網検索技術ブログ - 中国のコーディングの話
strとunicodestrとunicodeはどちらもbasestringのサブクラスです
ので、それがbasestringであるかどうかを判断する方法がありますstring
def is_str(s): 戻り isinstance(s,basestring) str と Unicode 変換ドキュメントをデコード
ドキュメントをエンコード
Difference
str は、Unicode でエンコードされたバイトで構成されるバイト文字列です
宣言メソッド
s = '中国語' s = u'中文'.encode('utf-8') >>> type('中文')> >> u'中文'.encode('utf-8') 'xe4xb8xadxe6x96x87' >>> len(u'中文'.encode('utf -8')) 6
宣言メソッド
ロジックで実際に使用したいものの長さを調べます
> ;> u'中文' u'u4e2du6587' >>> len(u'中文') 2
結論
必要なことを理解する str であっても unicode であっても、正しいものを使用してください処理メソッド(str.decode/unicode.encode)
unicode/strかどうかを判定する方法は以下の通りです>>> isinstance(u'中文', unicode) True >>> isinstance('中文', unicode) False >>> isinstance('中文', str) True >>> isinstance(u'中文', str) False
単純な原則: 使用しないでくださいstr をエンコードし、unicode にはデコードを使用しないでください (実際、str をエンコードできます。詳細については最後を参照してください。簡略化するため、これはお勧めしません)>>> utf-8') トレースバック (最新の呼び出しは最後): ファイル "#s は str s.decode('code_A').encode('code_B' code_A )
処理プロセスはこのように使用できます。Python をプール、入口、出口として考えてください
入口では、すべてが Unicode に変換され、すべてがプール内のは Unicode を使用して処理され、終了時にターゲットのエンコーディングに変換されます (もちろん例外があり、処理ロジックでは特定のエンコーディングが使用されます)
ファイルの読み取り 外部入力エンコーディング、Unicode へのデコード 処理 (内部エンコーディング、統合 Unicode) 必要なターゲット エンコーディングへのエンコード ターゲット出力 (ファイルまたはコンソール) への書き込み
IDE とコンソールがエラーを報告しました。その理由は、印刷時に, エンコーディングが IDE 独自のエンコーディングと一致しないため、出力するときに、エンコーディングを一貫したものに変換すると、出力が正常になります。推奨事項
標準化されたエンコーディング
環境コーディング、IDE/テキストエディタ、ファイルエンコーディング、データベースデータテーブルエンコーディング
コードソースファイルのエンコーディングを確認する
これは非常に重要です
ソースコードファイルでは、ドキュメントを宣言するために非ASCII文字をファイルヘッダーでエンコードする必要がある場合、
宣言されていない場合は、ASCIIです。非 ASCII 文字を入力するときにエラーが発生しました。非 ASCII 文字はファイルの 1 行目または 2 行目に配置する必要がありますファイル "XXX.py"、行 3 SyntaxError : ファイル c.py の行 3 にある非 ASCII 文字 'xd6'、ただし、エンコーディングは宣言されていません。詳細については http://www.php.cn/ を参照してください。
宣言メソッド# -*-coding: utf-8 -*- または #coding=utf-8
coding=utf-8、a = '中国語'を宣言、エンコーディングはutf-8です
ヘッダーがcoding=gb2312、a = '中国語'を宣言している場合、そのエンコーディングはgbk
はソース コード内で処理するためのハードコーディングされた文字列として使用され、その型を分離するために一律に unicode
を使用しますソースファイル自体のエンコーディングから独立しており、プロセス内のさまざまな場所での処理を容易にするための依存関係はありません
if s == u'中文': #Instead of s == '中文' pass #Note ここまで来たら、必ず Unicode に変換してください
上記の手順を完了したら、2 つの Unicode と設定したエンコーディング (通常は utf-8 を使用します) に注意するだけです処理順序
1.どこでも Unicode 3. 後でエンコードするstr.encode('other_coding')
Pythonでは、特定のエンコーディングstrを別のエンコーディングに直接エンコードします str
#str_Aはutf-8 str_A.encode('gbk') 実行される操作はstr_Aです.decode('sys_codec').encode('gbk') ここで、sys_codec は前のステップ
u 文字列は、u' > で対応する Unicode 文字列に変換されます
今後も関連情報を追加していきますのでよろしくお願いいたします。このサイトの!