84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
想请教一下python2.7下字符编码的两个问题。
python2.7爬虫爬取一个utf-8的中文网页,为了对防止乱码首先decode('utf-8')转化为unicode。然后如果将这些unicode编码的内容保存到文件的时候有调用encode('utf-8')以utf-8编码保存有没有必要?
# -*-coding:utf-8 -*-的作用是不是保存当前.py文件为utf-8编码?
人生最曼妙的风景,竟是内心的淡定与从容!
1. 必須
decode('utf-8') の機能は、utf8 でエンコードされた文字列を Unicode にデコードすることであり、Unicode は Python で最も受け入れられている文字エンコーディング形式です。これにより、文字エンコーディングの処理が不十分であるために問題が発生することはありません。さまざまなツールライブラリについて質問します。
2.はい
coding:utf-8 は、現在の Python コード ファイル内のすべての文字列のエンコーディングを指定するために使用されます
1. 必要ありません。 Web ページを保存し、response.read() で取得したバイト オブジェクトをバイナリ モードでファイルに書き込むだけです。
2. はい。
1. Python2を使用する場合は必須ではありませんが、必要です。 Unicode はメモリ内にのみ存在できます。ファイルに保存する場合は、utf-8 または gbk などでエンコードする必要があります。そうしないと、必ずエラーが報告されます。
はい、宣言されていない場合、デフォルトの形式は Ascii であるため、ファイルに中国語の文字が含まれる場合は、中国語のコメントなどのエラーが報告されます
Python 3 バージョンでは、デフォルトのエンコード形式 ASCII が変更されました
文字列エンコーディングに関する Liao Xuefeng のチュートリアル「文字列とエンコーディング」を参照することをお勧めします。 これを読むと、utf-8 と unicode の関係がわかります。
ファイルを保存するときに utf-8 にエンコードする必要がありますか
どちらも可能ですが、どちらのエンコーディングでファイルを保存するか、そしてどのエンコーディングが後続の処理に便利かによって決まります。ただし、Unicode 文字列を記述する場合は、codes.open を使用してファイルを開いてエンコードを設定するのが最善です。
ソースコードのエンコード定義の役割(# --coding:utf-8 --)
コード ファイルをデコードする方法を Python コンパイラーに指示しますが、ファイルの実際のエンコードがそれと一致することは保証されません。実際のファイルのエンコーディングは依然としてエディターによって決定されます (一部のエディターは # --coding:utf-8 -- を認識し、対応するエンコーディングで保存する場合があります)。
たとえば、私の vim のファイルエンコーディングは utf-8 に設定されていますが、py ファイルのエンコーディングは ascii (--coding:ascii --) に設定されています。現時点では、py ファイルの実際のエンコーディングは utf-8 ですが、Python コンパイラーは非 ASCII 文字に遭遇すると、ソース ファイルを解析します。SyntaxError です。 : 'ascii' コーデックは位置 5 のバイト 0xe4 をデコードできません: 序数が範囲 (128) にありません
文字セットは、からまでの各文字に対応する数字のセットです。たとえば、Unicode の A は 0041 に対応し、漢字の「I」は '6211'
utf-8 は、utf-16 および utf-32 と同様に、Unicode エンコード ストレージの実装です。
とbyte string (str)という 2 つの文字列型があります。unicode string (unicode)リーリー
byte string (str)
unicode string (unicode)
とencodeは、str 型と Unicode 型の間の変換を提供します。decode
encode
decode
たとえば、上記のファイルenc.pyを保存する場合、GBK となるように文件编码を選択します。 プログラム ファイルは、外部アプリケーション (エディターや Python インタープリターなど) を使用して開く場合、基本的にファイルです。 external アプリケーションはファイルのエンコード形式を認識しません、
enc.py
文件编码
現時点では 3 つの状況があります:
アプリケーションは解析にデフォルトのエンコード方式 (UTF-8 や ASCII など) を使用します。Python インタープリターのデフォルトは ASCII であり、エディターはそれを独自に設定できます。
テキスト ファイルは、デコードに使用するエンコード方式をアプリケーションに指示します。たとえば、
を削除して# -*- coding: GBK -*-を実行すると、出力:
# -*- coding: GBK -*-
出力結果:# -*- coding: GBK -*-リーリーpython enc.pyここから、s2 がファイルから読み取った GBK エンコードされたコンテンツをバイト形式で保存していることがわかります。
python enc.py
以下のコードを見てください。プログラム ファイル
リーリー
utf8_enc.py参考文献
utf8_enc.py
http://www.rrn.dk/the-differ...
https://docs.python.org/2 /どのように...
1. 必須
decode('utf-8') の機能は、utf8 でエンコードされた文字列を Unicode にデコードすることであり、Unicode は Python で最も受け入れられている文字エンコーディング形式です。これにより、文字エンコーディングの処理が不十分であるために問題が発生することはありません。さまざまなツールライブラリについて質問します。
2.はい
coding:utf-8 は、現在の Python コード ファイル内のすべての文字列のエンコーディングを指定するために使用されます
1. 必要ありません。 Web ページを保存し、response.read() で取得したバイト オブジェクトをバイナリ モードでファイルに書き込むだけです。
2. はい。
1. Python2を使用する場合は必須ではありませんが、必要です。 Unicode はメモリ内にのみ存在できます。ファイルに保存する場合は、utf-8 または gbk などでエンコードする必要があります。そうしないと、必ずエラーが報告されます。
はい、宣言されていない場合、デフォルトの形式は Ascii であるため、ファイルに中国語の文字が含まれる場合は、中国語のコメントなどのエラーが報告されます
Python 3 バージョンでは、デフォルトのエンコード形式 ASCII が変更されました
文字列エンコーディングに関する Liao Xuefeng のチュートリアル「文字列とエンコーディング」を参照することをお勧めします。 これを読むと、utf-8 と unicode の関係がわかります。
ファイルを保存するときに utf-8 にエンコードする必要がありますか
どちらも可能ですが、どちらのエンコーディングでファイルを保存するか、そしてどのエンコーディングが後続の処理に便利かによって決まります。
ただし、Unicode 文字列を記述する場合は、codes.open を使用してファイルを開いてエンコードを設定するのが最善です。
ソースコードのエンコード定義の役割(# --coding:utf-8 --)
コード ファイルをデコードする方法を Python コンパイラーに指示しますが、ファイルの実際のエンコードがそれと一致することは保証されません。
実際のファイルのエンコーディングは依然としてエディターによって決定されます (一部のエディターは # --coding:utf-8 -- を認識し、対応するエンコーディングで保存する場合があります)。
たとえば、私の vim のファイルエンコーディングは utf-8 に設定されていますが、py ファイルのエンコーディングは ascii (--coding:ascii --) に設定されています。
現時点では、py ファイルの実際のエンコーディングは utf-8 ですが、Python コンパイラーは非 ASCII 文字に遭遇すると、ソース ファイルを解析します。
SyntaxError です。 : 'ascii' コーデックは位置 5 のバイト 0xe4 をデコードできません: 序数が範囲 (128) にありません
Unicode と utf-8 の関係
Unicode は文字セットです
文字セットは、からまでの各文字に対応する数字のセットです。たとえば、Unicode の A は 0041 に対応し、漢字の「I」は '6211'
utf-8 は、utf-16 および utf-32 と同様に、Unicode エンコード ストレージの実装です。
utf-8 は最も広く使用されているエンコード方式で、可変長エンコードを使用し、文字を表すのに 1 ~ 4 バイトを使用します。utf-16 は 2 バイトまたは 4 バイトを使用し、utf-32 は 4 バイトで表されます。エンコード規則は次のとおりです:と
上記の出力では、最初の s の型は str で、出力されるコンテンツは utf-8 でエンコードされたコンテンツです。 2 番目の s の型は Unicode で、出力される 2 つの全角数字はそれぞれ 2 つの漢字「美的」を表します。byte string (str)
という 2 つの文字列型があります。unicode string (unicode)
リーリーテキストファイルとエディタの処理
リーリーたとえば、上記のファイル
enc.py
を保存する場合、GBK となるように文件编码
を選択します。 プログラム ファイルは、外部アプリケーション (エディターや Python インタープリターなど) を使用して開く場合、基本的にファイルです。 external アプリケーションはファイルのエンコード形式を認識しません、現時点では 3 つの状況があります:
アプリケーションは解析にデフォルトのエンコード方式 (UTF-8 や ASCII など) を使用します。Python インタープリターのデフォルトは ASCII であり、エディターはそれを独自に設定できます。
テキスト ファイルは、デコードに使用するエンコード方式をアプリケーションに指示します。たとえば、
は、デコードに GBK を使用するようにインタプリタに指示します。を削除して
リーリー# -*- coding: GBK -*-
を実行すると、出力:出力結果:
# -*- coding: GBK -*-
リーリーpython enc.py
ここから、s2 がファイルから読み取った GBK エンコードされたコンテンツをバイト形式で保存していることがわかります。以下のコードを見てください。プログラム ファイル
は UTF-8 エンコードで保存されています。リーリー
出力:リーリー
s2 に格納されているのは保存されたファイルの UTF-8 バイトコードであることもここでわかります。utf8_enc.py
参考文献http://www.rrn.dk/the-differ...
http://www.ruanyifeng.com/blo...https://docs.python.org/2 /どのように...
http://yergler.net/2012/bytes...