質問:
Web ページを収集し、処理後に文字列をファイルに保存するか、データベースに書き込むことがあります。このとき、収集した Web ページのエンコーディングが gb2312 である場合、文字列のエンコーディングを指定する必要があります。データベースはutf-8です。何も処理せずにデータベースに直接挿入すると文字化けが発生する可能性があります(テストしていないため、データベースが自動的にトランスコードするかどうかはわかりません)。gb2312を手動で変換する必要があります。 utf-8にします。
まず、Python の文字はデフォルトで ASCII コードであることを知っています。もちろん、英語は問題ありません。中国語に遭遇すると、すぐにひざまずきます。
まだ覚えているかどうかはわかりませんが、Python で漢字を出力するときは、文字列の前に u を追加する必要があります。
print u"来搞基吗?"
このようにして、中国語を表示することができます。ここでの u の機能は、中国語を正しく表示できるように、次の文字列を Unicode コードに変換することです。
それに関連する unicode() 関数があり、その使用法は次のとおりです
str="来搞基" str=unicode(str,"utf-8") print str
と u の違いは、str を Unicode エンコードに変換するために Unicode が使用されることです。ここでの utf-8 は、test.py スクリプト自体のファイル文字セットです。アンシになる。
Unicode がキーです。以下に進みます
Baidu ホームページのクロールを開始します。訪問者が Baidu ホームページにアクセスして Web ページのソース コードを表示すると、その charset=gb2312 が表示されます。
import urllib2 def main(): f=urllib2.urlopen("http://www.baidu.com") str=f.read() str=unicode(str,"gb2312") fp=open("baidu.html","w") fp.write(str.encode("utf-8")) fp.close() if __name__ == '__main__' : main()
説明:
まず、urllib2.urlopen() メソッドを使用して Baidu ホームページを取得します。f はハンドルで、str=f.read() を使用してすべてのソース コードを str
明らかに、str には取得した HTML ソース コードが含まれています。Web ページのデフォルトの文字セットは gb2312 であるため、それをファイルに直接保存すると、ファイル エンコーディングは ansi になります。
ほとんどの人にとって、これで十分ですが、場合によっては gb2312 を utf-8 に変換したい場合もあります。
最初:
str=unicode(str,"gb2312") #ここでの gb2312 は str の実際の文字セットです。これを Unicode に変換します
その後:
str=str.encode("utf-8") #Unicode文字列をutf-8に再エンコードします
最後に:
ファイルに str を書き込み、ファイルを開いてエンコーディングのプロパティを確認すると、それが utf-8 であることがわかります。utf-8 のトランスコーディングが完了しました。
概要:
指定した文字セットに従って文字列を保存する必要がある場合は、次の手順があることを確認してください:
1: unicode(str, "元のエンコーディング") を使用して str を Unicode 文字列にデコードします
2: str.encode("指定された文字セット") を使用して、Unicode 文字列 str を指定した文字セットに変換します
3: str をファイルに保存するか、データベースに書き込みます。当然、エンコーディングはすでに指定されていますよね。