前書き
文字エンコーディングで問題が発生するのは非常に簡単です:
1. どのエンコーディングを使用して保存するか、どのエンコーディングを使用して開くべきか
2. 実行プログラムの最初にファイルをメモリに読み取ることです
3. Unicode は親エンコーディングであり、他のエンコーディング形式にのみエンコードおよびデコードできます
UTF-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など、独自の国家文字エンコーディング標準をリリースしています。
3. Unicode
があると言われています文字エンコーディングは全盛期には無数にありましたが、それらは何百ものあり、相互にサポートしていませんでした。どの国の人々も非常に強い意志を持っているようですが、これでは世界の相互運用性が損なわれるため、Unicode が誕生しました。 。 1994 年、国際標準化機構はユニバーサル コードとして知られる Unicode をリリースしました。これは 2 バイトを使用して文字を表し、65,536 の組み合わせがあり、すでに世界中のほとんどの言語をカバーできます。
4.utf-8
Unicode は良いのですが、本来 1 バイトで表現できる英語が 2 バイト必要になり、ストレージ容量が 2 倍になるという問題があります。完璧なので、英語の文字には 1 バイト、中国語の文字には 3 バイトのみを使用する UTF-8 が作成されました。
5. Unicode 文字はすべて 2 バイトであり、単純で粗雑です。文字から数値への変換は高速ですが、多くの記憶域を占有します
UTF-8 は異なる長さを使用して異なる値を表します。文字、お金のスペースを節約しますが、変換効率は Unicode ほど速くありません
ccoint )ディスクI/OまたはネットワークI/O遅延がメモリ8を高速化するために使用されます。 utf-8 の変換効率と、ネットワーク送信時の帯域幅をできるだけ節約する必要があります
3. Python インタープリターの実行 第一段階: python インタープリターの起動は、テキストエディターの起動と同等です
第 2 段階: Python インタープリターは、t.py ファイルを開き、t.py ファイルの内容をハード ディスクからメモリに読み取るテキスト エディターとして機能します。 第 3 段階では、Python インタープリターが解釈して実行します。第 2 段階では、t.py ファイルが保存されるときに、同じエンコード方式 (デフォルトのエンコード方式) を指定する必要があります。 Python2 のデフォルトのエンコード方式は ASCII、Python3 のデフォルトのエンコード方式は utf-8 です) 保存するファイルのエンコード形式が Python インタプリタのデフォルトのエンコード方式と異なる場合は、ファイルの先頭に # を記述する必要があります。 : は、エラーが発生しないように、デフォルトのエンコード方式を使用してファイルを読み取るのではなく、ヘッダー ファイルで指定された方式を使用してファイルを読み取るように Python インタプリタに指示します。
第 3 段階: メモリにロードされたコード (デフォルトでは Unicode) を読み取り、実行します。実行中に変数の定義などの操作が発生すると、メモリ内に新しいメモリ空間が開かれます。 。このとき、新しく開かれるメモリ空間は必ずしも Unicode である必要はないことに注意してください。変数を定義するときに、ユーザーはエンコーディング方法を指定できます。定義中に開かれるメモリ空間は単なる空間であり、任意のエンコーディング形式でコードを格納できます。 Python3を例に挙げます
IV. エンコードとデコード
ファイルの保存とは、メモリ上のファイルをハードディスクに保存することです
ファイルの読み込みとは、ハードディスク内のファイルを読み取ることですメモリに
Unicode 親エンコーディング、utf-8、GBK、これらは子エンコーディングです 子コードを他のエンコーディングに変換したい場合は、まず親エンコーディングに変換してから行う必要があります。親コードから他の子エンコードに変換
デコードは子エンコードから変換されたデコード 親コードUnicodeになる過程です
エンコーディングはエンコーディングであり、Unicodeを他のエンコーディングに変換する過程です
として前に述べたように、ファイルがメモリに読み込まれると、Unicode エンコードになります (もちろん、これはデフォルトの状況であり、指示に従って変更することもできます)。ハードディスクからファイルを読み取るプロセスは、utf をデコードすることです。ハードディスク内の 8 を Unicode に変換します
ファイルを保存するときは、ファイルをメモリからハードディスクに保存する処理です。ハードディスクのエンコード方式は utf-8 でエンコードする必要があります。 Unicode から utf -8
5. Python2 と Python3 の違い
1. Python2 のデフォルトのエンコード方式は ASCII で、utf-8 で保存されたファイルを開くと、 #coding を追加する必要があります。 utf-8
Python2 では str は Bytes として認識されるため、Python2 の str は、デフォルトで 1 つのことを実行します。それは、先頭に u を追加することです。 str、まずUnicodeに変換してからバイトにエンコードします
String型にはstrとUnicodeの2つがあり、strは先頭に'u'を追加することでUnicodeに変換できます
2. Pythonのデフォルトのエンコード方法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 サイトの他の関連記事を参照してください。