[解決済み】 AttributeError:'bytes' object has no attribute 'encode'.
質問
Python2からPython3へコードをインポートしようとして、この問題が発生しました。
<ipython-input-53-e9f33b00348a> in aesEncrypt(text, secKey)
43 def aesEncrypt(text, secKey):
44 pad = 16 - len(text) % 16
---> 45 text = text.encode("utf-8") + (pad * chr(pad)).encode("utf-8")
46 encryptor = AES.new(secKey, 2, '0102030405060708')
47 ciphertext = encryptor.encrypt(text)
AttributeError:'bytes' オブジェクトには 'encode' という属性がありません。
を削除すると
.encode("utf-8")
というエラーが出てしまいます。どうやら
{コード
はバイト文字列のようです。を使うことはできません。
pad*chr(pad)
encode()
TypeError: strをbyteに連結できません。
しかし、不思議なことに、その部分だけ試してみると、encode()はうまくいくのです。
<ipython-input-65-9e84e1f3dd26> in aesEncrypt(text, secKey)
43 def aesEncrypt(text, secKey):
44 pad = 16 - len(text) % 16
---> 45 text = text.encode("utf-8") + (pad * chr(pad))
46 encryptor = AES.new(secKey, 2, '0102030405060708')
47 ciphertext = encryptor.encrypt(text)
解決するには?
文字列のようなオブジェクトがPython 2の文字列(バイト)かPython 3の文字列(ユニコード)かわからない場合。汎用的な変換器を用意すればいい。
Python3のシェルです。
text = { 'username': '', 'password': '', 'rememberLogin': 'true' }
text=json.dumps(text)
print(text)
pad = 16 - len(text) % 16
print(type(text))
text = text + pad * chr(pad)
print(type(pad * chr(pad)))
print(type(text))
text = text.encode("utf-8") + (pad * chr(pad)).encode("utf-8")
print(type(text))
{"username": "", "password": "", "rememberLogin": "true"}
<class 'str'>
<class 'str'>
<class 'str'>
<class 'bytes'>
Python 2 では、これらの式は両方とも次のように評価されます。
>>> def to_bytes(s):
... if type(s) is bytes:
... return s
... elif type(s) is str or (sys.version_info[0] < 3 and type(s) is unicode):
... return codecs.encode(s, 'utf-8')
... else:
... raise TypeError("Expected bytes or string, but got %s." % type(s))
...
>>> to_bytes("hello")
b'hello'
>>> to_bytes("hello".encode('utf-8'))
b'hello'
:
True
と
{コード
{コード
. そして
type("hello") == bytes
は次のように評価されます。
type("hello") == str
一方
type(u"hello") == str
False
であり、かつ
{コード
は
{コード
. そして
type(u"hello") == unicode
を発生させます。
True
例外が発生します。
type("hello") == bytes
False
type("hello") == str
関連
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み] UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
-
[解決済み] バイトを文字列に変換する
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み] オブジェクトの種類を決定しますか?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] Pythonでnullオブジェクトを参照する
-
[解決済み] Python 3で文字列をバイトに変換する最良の方法?
-
[解決済み] エラーです。" 'dict' オブジェクトには 'iteritems' という属性がありません "
-
[解決済み] AttributeError: 'NoneType' オブジェクトには 'something' という属性がありません」と表示されるのはなぜですか?
最新
-
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サンプルコード
-
任意波形を生成してtxtで保存するためのPython実装
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み] データ型が理解できない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】NameError: 名前 'self' が定義されていません。