ホームページ  >  記事  >  バックエンド開発  >  Pythonの文字エンコードを詳しく解説

Pythonの文字エンコードを詳しく解説

零下一度
零下一度オリジナル
2017-06-16 10:49:551222ブラウズ

次のエディターは、Python の基本的な文字エンコーディングに関する記事をお届けします。編集者はこれが非常に良いものだと思ったので、皆さんの参考として今から共有します。エディターをフォローして一緒に見てみましょう

前書き

文字エンコーディングは非常に問題が発生しやすいので、次の点に注意してください:

1.どのエンコーディングを使用するかを指定します

2. プログラムの実行では、最初にファイルがメモリに読み込まれます

3. Unicode は親エンコーディングであり、他のエンコーディング形式にのみエンコードおよびデコードできます

- 8、GBK これらはサブ 8 エンコーディングであり、デコードのみ可能です Unicode にエンコードされます

1. 文字エンコーディングとは何ですか

コンピューターはバイナリのみを認識できることはわかっており、私たちが通常記述するコードは変換する必要がありますコンピュータが認識できるようにバイナリに変換します。では、作成した文字をバイナリに変換するにはどうすればよいでしょうか? このプロセスでは、実際には、作成した文字を特定の数値に 1 対 1 で対応させるための標準が使用されます。この標準は文字エンコーディングと呼ばれます。

文字-----(文字エンコーディング)------>数字

2. 文字エンコーディングの発展の歴史

1. ASCIIコード

米国では、文字エンコーディングも米国で生まれました。しかし、アメリカ人が使用する文字は 26 文字といくつかの特殊記号だけです。中国とは異なり、小学生は何千もの漢字を知っていなければなりません。そのため、アメリカ人は文字エンコードとして ASCII コード (American Standard Code for Information Interchange) を使用し、1 バイト = 8 ビットで 256 の異なる変更が可能ですが、最初は最初の 7 文字のみです。ビット、つまり 127 文字が使用されましたが、これはアメリカ人にとっては十分です (もちろんコスト上の理由から)。その後、ラテン語が 8 位にコンパイルされました。この時点で、ASCII コードは充実しており、英語圏とラテン語の国が楽しくプレイできます。

2.GBK

中国の現在の技術はアメリカ帝国ほどではありませんが、私たちは前向きな心を持っています。そのため、1980年に国家標準局は中国語で使用される文字コードを発行しました - -> GBK は漢字を表すのに 2 バイトを使用するため、2 の 16 乗、つまり 65536 通りの組み合わせがあり、これは漢字には十分です。

同時に、他の国でも、日本のshift_JIS、韓国のEuc-krなど、独自の文字エンコーディング標準がリリースされています。全盛期にはさまざまな文字エンコーディングがあり、相互にサポートしていないようですが、これでは世界の相互運用性が損なわれるため、Unicode が誕生しました。 1994 年、国際標準化機構はユニバーサル コードとして知られる Unicode をリリースしました。これは 2 バイトを使用して文字を表し、65,536 の組み合わせがあり、すでに世界中のほとんどの言語をカバーできます。

4.utf-8

Unicode は優れていますが、本来 1 バイトで表現できる英語が 2 バイト必要になり、ストレージ容量が 2 倍になるという問題があります。完璧なので、英語の文字には 1 バイト、中国語の文字には 3 バイトのみを使用する UTF-8 が作成されました。

5. Unicode の文字はすべて 2 バイトであり、文字から数値への変換は高速ですが、utf-8 では異なる文字を表すために多くの記憶領域が必要になります。スペースは節約できますが、変換効率は Unicode ほど速くありません メモリで使用される文字エンコーディングは Unicode なので、速度を確保するには少しスペースを犠牲にする必要があります

。ディスクおよびネットワーク送信では utf-8 を使用します。ディスク I/O またはネットワーク I/O 遅延が utf-8 の変換効率よりもはるかに大きいため、ネットワーク送信中に帯域幅をできるだけ節約する必要があります

3 つ。 Python インタープリターの実行

第 1 段階:

Python インタープリターが開始されると、テキスト エディターを開始するのと同じになります。第 2 段階: Python インタープリターは、t.py ファイルを開いて内容を読み取るテキスト エディターとして機能します。 t.py ファイルをハードディスクからメモリに読み込みます

第 3 段階: Python インタープリターは、メモリにロードされたばかりの t.py のコードを解釈して実行します

第 2 段階では、t.pyファイルには保存時の文字エンコーディングがあり、Python インタプリタでファイルを開くときに同じエンコーディング方式も指定する必要があります (Python2 のデフォルトのエンコーディング方式は ASCII、Python3 のデフォルトのエンコーディング方式は utf-8)ファイル保存のエンコード形式が Python インタープリターのデフォルトのエンコード方式と異なる場合は、ファイルの先頭に #coding: を記述して、Python インタープリターにデフォルトのエンコード方式を使用しないように指示する必要があります。ただし、ヘッダー ファイルで指定されたメソッドを使用してファイルを読み取るため、エラーは発生しません。

第 3 段階: メモリにロードされたコード (デフォルトでは Unicode) を読み取り、実行します。実行中に変数の定義などの操作が発生すると、メモリ内に新しいメモリ空間が開かれます。 。このとき、新しく開かれるメモリ空間は必ずしも Unicode である必要はないことに注意してください。変数を定義するときに、ユーザーはエンコーディング方法を指定できます。定義中に開かれるメモリ空間は単なる空間であり、任意のエンコーディング形式でコードを格納できます。 Python3を例に挙げます

4. エンコードとデコード

ファイルの保存とは、メモリ内のファイルをハードディスクに保存することです

ファイルの読み込みとは、ハードディスク内のファイルを読み取ることですメモリに

Unicode 親エンコーディング、utf-8、GBK、これらは子エンコーディングです。子コードを他のエンコーディングに変換したい場合は、まず親エンコーディングに変換してから、親エンコーディングに変換する必要があります。親のエンコーディングから他の子のエンコーディングに変換するのがデコーディング

親のエンコーディングになる過程がデコーディング

です。前に述べたように、ファイルがメモリに読み込まれると、Unicode エンコードになります (もちろん、これはデフォルトの状況であり、指示に従って変更することもできます)。ハードディスクからファイルを読み取るプロセスは、UTF をデコードすることです。ハードディスク内の8をUnicodeに変換します

ファイルを保存する際、メモリからハードディスクに保存する処理です。ハードディスクのエンコード方式はutf-8となっており、Unicodeでエンコードする必要があります。 utf -8

5. Python2とPython3の違い1. Python2のデフォルトのエンコーディングは、utf-8で保存されたファイルを開くと、#coding: utfが報告されます。 -8 をヘッダー ファイルに追加する必要があります。Python2 の

Str はバイトとして認識されるため、Python2 の str は、デフォルトで 1 つのことを実行します。それは、str の前に u を追加することです。 , まず Unicode に変換してからバイトにエンコードします

Python2 には str と Unicode の 2 つの文字列型があります。str は先頭に「u」を追加することで Unicode に変換できます

2。 3 は utf-8 で、直接開いて utf-8 で保存できます Python3 のファイル

str は Unicode として認識されます

Python3 にも 2 つの文字列型 (bytes と str) がありますが、bytes は bytes と str ですunicodeです

6. ターミナルに印刷します

まず、Windowsターミナルのデフォルトのエンコード方式はGBKであることを知っておく必要があります

ターミナルもアプリケーションでありメモリ内で実行されるため、printで印刷するプロセスは()は記憶から記憶へ。したがって、Unicode の場合、どのように出力してもエラーは発生しません。ただし、Python2 では、「u」を含む文字列を除いて、他の文字列はバイトになります。一方、Python2 では、指定された utf-8 またはデフォルトの Ascii コードである場合、ターミナルで印刷するときにエラーが発生します。

現時点での理解ですので、今後誤りや不明瞭な表現があれば修正していきます。ああ、文字エンコーディングには落とし穴があります

以上がPythonの文字エンコードを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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