ホームページ > バックエンド開発 > Python チュートリアル > Butong Python 中国語問題解決法(多くの先人の経験をまとめた初心者必読)

Butong Python 中国語問題解決法(多くの先人の経験をまとめた初心者必読)

WBOY
リリース: 2016-06-16 08:47:13
オリジナル
934 人が閲覧しました

Python には独自のドキュメントが付属しているため、ヘルプ機能を使用して各システム関数の使用方法の説明を問い合わせることができます。基本的に、本システムのドキュメントには主な使用方法や注意事項が明記されております。システムマニュアルの機能説明の中国語版をインターネットで探してみましたが、見つからなかったので、システム独自の機能説明の英語版を利用して学ぶことにしました。

Tkinter と wxPython でプログラミングしたい、一般的なウィジェットの使い方やプロパティの導入方法を知りたい、英語があまり得意でないという方は、本書の「Python と Tkinter プログラミング」を読むことをお勧めします。 , 392 ~ 538 ページの付録 B と付録 C では、よく使用される機能とほぼすべての属性が選択されて紹介されており、見逃せません。

上で述べたツールはすぐに完成しました。クエリされていない関数をクエリし、キーワード キーとクエリ結果の情報を保存して、チェックしていないことがわかった場合は、次回リストから直接チェックできるようにすることができます。 list - それは非常に単純なガジェットです。すべてがうまくいっているようです。しかし、問題も発生します。英語の情報を開いた後、説明内のいくつかの単語の意味がわかりません。単語を確認した後、情報を保存した後、直接開くことができます。次回はハードディスク。ただし、英語の情報に中国語を入力すると、保存処理中にデコードできないという問題が発生します。つまり、中国語部分にデコードするときに、次のエラーが表示されます:

UnicodeEncodeError: ' ascii' コーデックは位置 61 の文字 u 'u6211' をエンコードできません: 序数が範囲 (128) にありません

位置 61 は柔軟であり、情報に中国語の文字が追加される位置です。このエラーは基本的に常に存在します。つまり、変更された情報をファイルに書き込みたい場合です:

コードをコピー コードは次のとおりです:

fp = open('tt.txt','w')
fp.write(info.encode("UTF-8")) # ここにエラーがあります
fp.close()

この 3 行自体は間違っていないようです。しかし、コードの中間行でエラーが発生しました。エンコード方法が間違っているのでしょうか? ANSI、UTF-8、SHIFT_JIS、GB2312、GBK、その他のエンコーディングなど、多くのエンコーディングを試しましたが、どれも機能しません。それで私は混乱しました。

今、なぜうまくいかなかったのか分かりました。問題は、変更された情報文字列変数にあります。 info のデータは、ヘルプ機能を通じてシステム内で見つけた文字列 (つまり、元の純粋な英語の情報) に手動で入力した中国語を加えて取得した包括的な文字列です。システムからシステム ドキュメントをクエリするときは、元の情報を次のように保存します:
コードをコピー コードは次のとおりです:

fp = open('tt.txt','w')
fp.write(info)
fp.close()

間違いは直接write 元の情報はファイルに直接書き込まれます。これを書いた後、エンコード方法が何であるか知っている人はいますか? tt.txtを開いてエンコード方式を確認すると、ANSI形式であることがわかります。したがって、次のようなエラーが発生しました。キーワード キーをクエリし、ANSI 形式の文字列情報をコントロールに読み込んで表示し、次に手動で UTF-8 形式の中国語文字を追加したため、それらを接続して形成された文字列は Info です。複数のエンコード方式による文字列情報の混同。システムがどのように記述しても、1 つのエンコード方式だけを使用してこの混合文字列情報を tt.txt に再度書き込むことはできません。

したがって、結論としては、メモリ上で操作する場合、エンコード方法は何でもよく、具体的な状況に応じてシステムが自動的に判断します。ただし、漢字を使用してファイルにデータや文字列を一時的に保存する場合は、初めてファイルを書き込むときに次のように UTF-8 形式で記述する必要があります。メソッド:
コードをコピー コードは次のとおりです:

fp = open('tt.txt','w')
fp.write(info) .encode("UTF-8"))
fp.close()

これにより、制御テキストであっても、次回印刷および表示するときにエンコードを変換せずに直接読み取ることができます。 、問題ありません。必ずご注意ください。

問題が見つかりました。以下でその他の議論をしましょう。

# -*-coding: utf-8 -*- さえ使えれば十分ではないかという人もいる。あまり。

テストに合格しました (IDLE (Python2.5.4 GUI) コンパイラを使用しています。 [1] # -*-coding: utf-8 -*- を先頭に使用するかどうか、または設定されているかどうかソフトウェアでは、デフォルトの utf-8 エンコード方式を使用することに加えて、コントロールとファイルの間に中国語を使用することも問題ありません。その理由は、コンパイラのアップグレードにより、初期の中国語の表示と使用の問題が解決されたためです。
コードをコピーします。 コードは次のとおりです:

#coding=utf-8
試してみます:
JAP=open("jap.txt","r")
CHN=open("chn.txt","r" )
UTF=open("utf.txt","w")

jap_text=JAP.readline()
chn_text=CHN.readline()
#最初に UTF にデコードします- 16. 次にUTF-8にエンコードします
jap_text_utf8=jap_text.decode("SHIFT_JIS").encode("UTF-8")
#utf-8に変換しなくてもできます
chn_text_utf8=chn_text .decode("GB2312").encode("UTF-8")
#エンコード方式は大文字でも小文字でもUTF-8は同じ
UTF.write(jap_text_utf8)
UTFです。 write(chn_text_utf8)
UTF.close()
例外 IOError,e:
print "open file error",e

これは http:// から取得したものですwww.jb51.net/article/26542 記事「Python コーディングを扱うための Python の学習」から抜粋したコード (.htm)。上記の jap_text_utf8 と chn_text_utf8 は、マシンのデフォルトのエンコード方式であること、または utf-8 エンコード方式であることを保証する必要があります。最も重要なことは、一貫性があることです。それを utf-8 に均一にエンコードした後、問題なくファイルに書き込んで読み取って再度使用することができます。読み取るときは、次の通常の方法を使用します。
コードをコピーします コードは次のとおりです:

filen = open(' tt.txt')
info = filen.read()
print info

また。誰かが次のメソッドを使用してエンコードと変換を行いました:
コードをコピー コードは次のとおりです:

import sys
リロード (sys)
sys.setdefaultencoding('utf8')

def ConvertCN(s):
return s.encode('gb18030')

def PrintFile(filename) :
f = file(filename, 'r')
for f_line in f.readlines():
print ConvertCN(f_line)
f.close()

if __name__ = = "__main__":
PrintFile('1.txt')
print ConvertCN("n****** 終了するには任意のキーを押してください! ******")
print sys .stdin .readline()

私のテストによると、このメソッドは実行可能ではありません。 2 行目が削除されると、3 行目の setdefaultencoding 関数は無効になります。2 行目が保持されると、3 行目以降のコードは実行されません (ただし、エラーは報告されません)。この方法が実現可能であればぜひ試してみてください。
さらに、記事「Python における中国語の文字化けコードの問題の詳細な分析」http://www.jb51.net/article/26543.htm では、テキストのエンコード方法に関する多くの問題について説明されており、私の目を開かせてくれました。 。テキストエンコーディングの原理: 内部エンコーディング方法を示すために適切なコメント記号がテキストの先頭に追加されることが判明したため、インタプリタは特定の対応するルールを使用して、特定のバイトステップサイズまたは柔軟なステップサイズに従って単語を翻訳します。このセクションでは、原文が取得され、ステップの長さと翻訳のルールは冒頭の説明に完全に対応しています。したがって、テキストがシングルバイト エンコードの場合は、エンコードの先頭に適切なルールを追加して、エンコードされたテキストの翻訳方法を他の人に伝えることができます。その中で、BOM_UTF_8 などのテキストの末尾の知識も非常に興味深いものであり、BOM_UTF_16 なども同様に、テキストの末尾にある記号が異なります。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート