[解決済み] Python 3で文字列をバイトに変換する最良の方法?
質問
文字列をバイトに変換する方法は2種類あるようです。 TypeError: 'str' は buffer インタフェースをサポートしていません。
どちらの方法がより良い、あるいはよりPythonicな方法でしょうか?それとも単に個人の好みの問題でしょうか?
b = bytes(mystring, 'utf-8')
b = mystring.encode('utf-8')
解決方法は?
のドキュメントを見ると
bytes
を指し示す。
bytearray
:
bytearray([ソース[, エンコーディング[, エラー]])
新しいバイトの配列を返します。bytearray型は0 <= x < 256の範囲の整数の変更可能な配列である。また、bytes型が持つほとんどのメソッドは、 Bytes and Byte Array Methods を参照してください。
オプションの source パラメータは、いくつかの異なる方法で配列を初期化するために使用されます。
文字列の場合は、エンコード(オプションでエラー)パラメータも与える必要があります。bytearray() は次に str.encode() を使用して文字列をバイトに変換します。
整数の場合、配列はそのサイズになり、ヌルバイトで初期化されます。
buffer インタフェースに準拠したオブジェクトの場合、bytes 配列の初期化にそのオブジェクトの読み取り専用 buffer が使用されます。
反復可能な場合は,0 <= x < 256 の範囲の整数の反復可能でなければならず,これを配列の初期内容として使用する。
引数がない場合、サイズ0の配列が作成されます。
そこで
bytes
は単に文字列をエンコードするだけでなく、もっと多くのことができます。それが、意味のあるあらゆるタイプのソースパラメータでコンストラクタを呼び出すことを可能にするのは、Pythonicなことです。
文字列をエンコードする場合、私は
some_string.encode(encoding)
はコンストラクタを使うよりも Pythonic で、最も自己文書化されているからです -- "take this string and encode it with this encoding" は
bytes(some_string, encoding)
-- コンストラクタを使う場合は、明示的な動詞はありません。
Pythonのソースを確認しました。にunicode文字列を渡すと
bytes
を CPython を使って呼び出すと
PyUnicode_AsEncodedString
の実装である
encode
を呼び出すと、間接的なレベルをスキップすることになります。
encode
を自分で作る。
また、Serdalisのコメントもご覧ください --。
unicode_string.encode(encoding)
は、その逆が
byte_string.decode(encoding)
と対称性がいい。
関連
-
Pythonコンテナのための組み込み汎用関数操作
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] C#で文字を繰り返し表示する最適な方法
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
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 カメの描画コマンドとその例
-
Pythonによるjieba分割ライブラリ
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】ValueError: xとyは同じサイズでなければならない