pythonコードについて、本当に分かりましたか?
3274 ワード
コンピュータストレージのいくつかの概念
符号化の問題を徹底的に明らかにするには、まずコンピュータがどのようにデータを格納しているのかを明らかにしなければなりません.これはコンピュータの基礎のいくつかの概念に関連しています.冒頭では、この混同しやすい概念を撫でてみましょう.
bit
バイナリビットは、コンピュータ内部のデータ格納の最小単位であり、11010100は8ビットのバイナリ数である.1つのバイナリビットは0と1の2つの状態しか表すことができない(2^1).2つのバイナリビットは、00、01、10、11の4つの(2^2)状態を表すことができる.3桁のバイナリ数は8つの状態(2^3)を表すことができます......
Byte
バイトは、コンピュータにおけるデータ処理の基本単位であり、コンピュータにおいてバイト単位で情報を記憶・解釈し、1バイトが8個のバイナリビットからなる、すなわち1バイトが8個のビット(1 Byte=8 bit)に等しいことを規定する.8ビットのバイナリ数は最小で00000000、最大で11111111です.通常、1バイトはASCIIコードを1つ、2バイトは漢字の国標コードを1つ保存することができます.
ワード
コンピュータでは、一連のデジタルが全体として処理または演算されるもので、コンピュータの字と呼ばれ、宇と略称される.文字は通常、いくつかのバイトに分けられます(各バイトは一般的に8ビットです).メモリには、通常、各ユニットに1つのワードが格納されるので、各ワードはアドレス可能である.字の長さは桁数で表す.コンピュータの演算器、コントローラでは、通常、ワード単位で伝送される.
文字の長さ
ワード長:コンピュータ技術でCPUが単位時間(同じ時間)で一度に処理できるバイナリ数のビット数をワード長と呼ぶ.したがって、ワード長8ビットのデータを処理できるCPUは、通常、8ビットのCPUと呼ばれる.同じ32ビットのCPUでは,32ビットのワード長のバイナリデータを単位時間で処理できる.
バイトとワード長の違い:よく使われる英語の文字は8ビットバイナリで表すことができるため、通常は8ビットを1バイトと呼ぶ.ワード長の長さは固定されておらず,CPUによってワード長の長さが異なる.8ビットのCPUは一度に1バイトしか処理できないが、32ビットのCPUは一度に4バイトを処理でき、同理文字長64ビットのCPUは一度に8バイトを処理できる.
一般的なエンコーディング
コンピュータメモリではUnicodeコードを統一的に使用し、ハードディスクに保存する必要がある場合や転送する必要がある場合はUTF-8コードに変換することで、多くのストレージスペースを節約できます.
Pythonコード
注意:python 2について説明します.7の場合
2つの関数
pythonではstrとunicodeはbasestringのサブクラスであり、basestringには次の2つの方法があります.
PS:
くり1個
結果はこうだった
コンソールの下に
結論: pythonで定義されたstr変数は、実際にはバイト列であり、Unicodeが符号化(encode)されたバイトからなる(utf 8符号化の中国語文字が3バイトであることも証明されている) Unicodeこそ本当の意味での文字列で、文字からなる 2つの関数の使い方をもう一度振り返る
新しい結論:異なる符号化変換はUnicodeを中間符号化として用いる
Python 3.xバージョンでは、
Pythonソースコードもテキストファイルなので、ソースコードに中国語が含まれている場合、ソースコードを保存する場合は、必ずUTF-8コードとして保存するように指定する必要があります.Pythonインタプリタがソースコードを読み込む場合、UTF-8コードで読み込むために、通常、ファイルの先頭にこの2行を書きます.
リファレンス
バイト、字、ビット、この4つの関係廖雪峰:python 2.7教程の文字列と符号化PYTHON-進級-符号化処理小結
符号化の問題を徹底的に明らかにするには、まずコンピュータがどのようにデータを格納しているのかを明らかにしなければなりません.これはコンピュータの基礎のいくつかの概念に関連しています.冒頭では、この混同しやすい概念を撫でてみましょう.
bit
バイナリビットは、コンピュータ内部のデータ格納の最小単位であり、11010100は8ビットのバイナリ数である.1つのバイナリビットは0と1の2つの状態しか表すことができない(2^1).2つのバイナリビットは、00、01、10、11の4つの(2^2)状態を表すことができる.3桁のバイナリ数は8つの状態(2^3)を表すことができます......
Byte
バイトは、コンピュータにおけるデータ処理の基本単位であり、コンピュータにおいてバイト単位で情報を記憶・解釈し、1バイトが8個のバイナリビットからなる、すなわち1バイトが8個のビット(1 Byte=8 bit)に等しいことを規定する.8ビットのバイナリ数は最小で00000000、最大で11111111です.通常、1バイトはASCIIコードを1つ、2バイトは漢字の国標コードを1つ保存することができます.
ワード
コンピュータでは、一連のデジタルが全体として処理または演算されるもので、コンピュータの字と呼ばれ、宇と略称される.文字は通常、いくつかのバイトに分けられます(各バイトは一般的に8ビットです).メモリには、通常、各ユニットに1つのワードが格納されるので、各ワードはアドレス可能である.字の長さは桁数で表す.コンピュータの演算器、コントローラでは、通常、ワード単位で伝送される.
文字の長さ
ワード長:コンピュータ技術でCPUが単位時間(同じ時間)で一度に処理できるバイナリ数のビット数をワード長と呼ぶ.したがって、ワード長8ビットのデータを処理できるCPUは、通常、8ビットのCPUと呼ばれる.同じ32ビットのCPUでは,32ビットのワード長のバイナリデータを単位時間で処理できる.
バイトとワード長の違い:よく使われる英語の文字は8ビットバイナリで表すことができるため、通常は8ビットを1バイトと呼ぶ.ワード長の長さは固定されておらず,CPUによってワード長の長さが異なる.8ビットのCPUは一度に1バイトしか処理できないが、32ビットのCPUは一度に4バイトを処理でき、同理文字長64ビットのCPUは一度に8バイトを処理できる.
一般的なエンコーディング
ASCII
:1バイト、英字と記号のみを符号化gb2312
:2バイト、中国語の漢字と記号を追加Unicode
:すべての言語を1セットの符号化に統一し、すべての言語を1セットの符号化に統一する.一般的には2バイト、辺鄙な字4バイトである.utf-8
:可変長符号化、よく使われる英字は1バイトに符号化され、漢字は通常3バイトで、辺鄙な文字だけが4-6バイトに符号化される.転送するテキストに英語の文字がたくさん含まれている場合は、UTF-8でエンコードするとスペースが節約されます.コンピュータメモリではUnicodeコードを統一的に使用し、ハードディスクに保存する必要がある場合や転送する必要がある場合はUTF-8コードに変換することで、多くのストレージスペースを節約できます.
Pythonコード
注意:python 2について説明します.7の場合
2つの関数
pythonではstrとunicodeはbasestringのサブクラスであり、basestringには次の2つの方法があります.
encode()
:unicode文字列を他の符号化文字列に変換し、パラメータを変換後符号化decode()
:他の符号化をunicode文字列に変換し、パラメータを変換前の符号化に変換PS:
"string".decode('utf-8') == unicode('string', 'utf-8')
くり1個
s = ' '
print type(s), len(s)
u = u' '
print type(u), len(u)
u2s = u' '.encode('utf-8')
print type(u2s), len(u2s)
結果はこうだった
6
2
6
コンソールの下に
u2s
を表示>>> u' '.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'
結論:
s = ' '
# str, unicode decode
u = s.decode('utf-8')
print type(u)
#
# unicode str , encode
s2 = u.encode('utf-8')
print type(s2)
#
新しい結論:異なる符号化変換はUnicodeを中間符号化として用いる
#s code_A str
s.decode('code_A').encode('code_B')
Python 3.xバージョンでは、
'xxx'
とu'xxx'
をUnicode符号化に統一している.すなわち、プレフィックスuを書くか書かないかは同じであり、バイト形式で表される文字列にはbプレフィックス:b'xxx'
を付けなければならない.Pythonソースコードもテキストファイルなので、ソースコードに中国語が含まれている場合、ソースコードを保存する場合は、必ずUTF-8コードとして保存するように指定する必要があります.Pythonインタプリタがソースコードを読み込む場合、UTF-8コードで読み込むために、通常、ファイルの先頭にこの2行を書きます.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
リファレンス
バイト、字、ビット、この4つの関係廖雪峰:python 2.7教程の文字列と符号化PYTHON-進級-符号化処理小結