[解決済み] エンコード/デコードの違いは何ですか?
質問
str/unicodeのdecodeとencodeの違いがよくわからないのですが、どうしたらいいですか?
私が知っているのは
str().decode()
は、ある文字エンコーディングを持つバイト列があるとき、そのエンコーディング名を指定するとユニコード文字列を返してくれるものです。
知っているのは
unicode().encode()
は、与えられたエンコーディング名に従って、Unicode 文字をバイト列に変換します。
しかし
str().encode()
と
unicode().decode()
が対象です。どなたか解説していただけませんか?
EDIT
いくつかの回答では
.encode
は文字列に対して行うが、誰も
.decode
はユニコードに対応します。
解決方法は?
その
decode
メソッドは、実際には何の用途もありません (何らかの理由で unicode 文字列に非テキストデータが含まれている場合は別ですが -- 下記参照)。これは主に歴史的な理由で存在するのだと思います。Python 3では、それは完全になくなっています。
unicode().decode()
を実行すると、暗黙のうちに
エンコーディング
の
s
をデフォルト(ascii)コーデックで使用します。このように検証します。
>>> s = u'ö'
>>> s.decode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
>>> s.encode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 0:
ordinal not in range(128)
エラーメッセージは全く同じです。
について
str().encode()
はその逆で、暗黙のうちに
デコード
の
s
をデフォルトエンコードで使用します。
>>> s = 'ö'
>>> s.decode('utf-8')
u'\xf6'
>>> s.encode()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0:
ordinal not in range(128)
このように使用します。
str().encode()
も余分です。
しかし は、後者の方法の別の応用として、有用なものがあります。 エンコーディング は文字セットとは無関係なので、8ビット文字列に意味のある方法で適用することができます。
>>> s.encode('zip')
'x\x9c;\xbc\r\x00\x02>\x01z'
しかし、あなたの言う通り、これらのアプリケーションの両方で "encoding" が曖昧に使われているのは...不愉快です。もう一度、別々の
byte
と
string
の型は、Python 3では、もはや問題ではありません。
関連
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み] UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
-
[解決済み] 文字列リテラルの前にある'b'文字は何を意味するのでしょうか?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] Pythonの__future__は何に使うのか、いつ、どのように使うのか、その仕組みについて
-
[解決済み】if __name__ == "__main__": は何をするのでしょうか?
-
[解決済み】__str__と__repr__の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonによるLeNetネットワークモデルの学習と予測
-
Pythonコンテナのための組み込み汎用関数操作
-
PicgoのイメージベッドツールをPythonで実装する
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み] Pythonのunicode()とencode()関数の使用法