私は「バイト文字列」( )を返すライブラリを使用しておりbytes
、これを文字列に変換する必要があります。
これら 2 つには実際に違いがあるのでしょうか? これらはどのように関連しており、どのように変換すればよいのでしょうか?
ベストアンサー1
コンピュータが保存できるのはバイトだけです。
コンピュータに何かを保存するには、まずそれをエンコード、つまりバイトに変換する必要があります。例:
MP3、WAV、PNG、JPEG、ASCII、UTF-8 はエンコーディングの例です。エンコーディングは、オーディオ、画像、テキストなどをバイト単位で表す形式です。
Python では、バイト文字列は、バイトのシーケンスに過ぎません。人間が判読できるものではありません。内部的には、すべてをバイト文字列に変換してからコンピューターに保存する必要があります。
一方、文字列は、単に「文字列」と呼ばれることが多い、文字のシーケンスです。人間が判読できます。文字列はコンピューターに直接保存することはできず、最初にエンコード(バイト文字列に変換) する必要があります。ASCII や UTF-8 など、文字列をバイト文字列に変換できるエンコードは複数あります。
'I am a string'.encode('ASCII')
上記の Python コードは、文字列'I am a string' をASCII エンコーディングを使用してエンコードします。 上記のコードの結果はバイト文字列になります。 これを印刷すると、Python はそれを として表現します。 ただし、バイト文字列は人間が読める形式ではなくb'I am a string'
、印刷時に Python が ASCII からデコードするだけであることを覚えておいてください。 Python では、バイト文字列は で表され、その後にバイト文字列の ASCII 表現が続きます。b
バイト文字列は、エンコードに使用されたエンコーディングがわかっていれば、文字列にデコードすることができます。
b'I am a string'.decode('ASCII')
上記のコードは元の文字列を返します'I am a string'
。
エンコードとデコードは逆の操作です。ディスクに書き込む前にすべてをエンコードする必要があり、人間が読み取る前にデコードする必要があります。