質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

2977閲覧

バイト列のデコードについて

KM56894995

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/02/05 09:52

下記のバイト列をデコードして文字列として整形したいのですがうまくいきません

in:
b = str(binascii.unhexlify("0300002f2ae00000000000436f6f6b69653a206d737473686173683d41646d696e697374720d0a0100080003000000").decode("utf-8-sig",errors="backslashreplace"))
b

out:
'\x03\x00\x00/*\xe0\x00\x00\x00\x00\x00Cookie: mstshash=Administr\r\n\x01\x00\x08\x00\x03\x00\x00\x00'

具体的には上記のようにデコードした後、下記のように整形しようとしてもできません。

in:
print(b.replace("/*\xe0"," "))

out:
/*\xe0Cookie: mstshash=Administr

わかる方いましたらご回答よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/02/05 09:58

in と out という文字は何を表現していますか? 最終的に欲しいのは一番下の /*\xe0Cookie: mstshash=Administr ?
KM56894995

2019/02/05 10:01

inとoutは入力と出力のつもりでした。 最終的にほしいのは下記の文字列のみになります。 ”Cookie: mstshash=Administr”
guest

回答2

0

python

1b = binascii.unhexlify("0300002f2ae00000000000436f6f6b69653a206d737473686173683d41646d696e697374720d0a0100080003000000").decode("utf-8-sig",errors="backslashreplace") # strに変換する必要はなし 2print(b[b.find("Cookie"):b.find("\r\n")]) # Cookie~改行まででスライス 3# => Cookie: mstshash=Administr

bを作るときのdecodeもやめて、bytesのまま取り出してからsliceしてdecodeの方が手っ取り早いかも。

python

1>>> b = binascii.unhexlify("0300002f2ae00000000000436f6f6b69653a206d737473686173683d41646d696e697374720d0a0100080003000000") 2>>> b[b.find(b"Cookie"):b.find(b"\r\n")].decode() 3'Cookie: mstshash=Administr'

投稿2019/02/05 10:03

編集2019/02/05 10:07
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KM56894995

2019/02/05 10:14

特定の文字列までスライスと効率のいい方法教えて頂いてありがとうございます。
guest

0

ベストアンサー

引用符の中で\\を表したいときは、raw文字列にします。

Python

1print(b.replace(r"/*\xe0"," "))

投稿2019/02/05 10:03

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/02/05 10:06

ただこれだと、目に見えない`\x00`などが前後にくっついていますが。
KM56894995

2019/02/05 10:12

ありがとうございます。 もし、目に見えない`\x00`等を取り除く方法あれば教えていただきたいです。
otn

2019/02/05 10:16 編集

それらを取るとすると、 b.replace(r"/*\xe0","").strip("\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0B\x0C\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F") \r と \n だけ残します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問