3

現在、メソッドのパラメーターとして文字列を取得しています。I インデックスで文字を抽出し、16 進値を取得したいと考えています。現在私はやっています:

temp = string[i]
binascii.hexlify(temp);

しかし、私はエラーが発生します:

TypeError: 'str' does not support the buffer interface

アイデアはありますか?

4

1 に答える 1

3

文字列をバイトにエンコードする必要があります。

binascii.hexlify(temp.encode('ascii'));

テキストを適切に表現できる適切なエンコーディングを選択する必要があります。ここでは、Unicode 文字が 0 ~ 127 の範囲にあると想定しています。

別のエンコーディングにエンコードすると、結果はそのエンコーディングの 16 進数表現になります。たとえば、UTF-8 は 1 文字あたり 1 ~ 6 バイトを使用します。

または、ord()関数を使用して、結果を 16 進数にフォーマットすることもできます。

format(ord(temp), 'x')

あらゆるユニコード文字で動作します。16 進表現に Unicode コード ポイントを使用するため、1 ~ 4 バイト (\Uabcdefghワイド文字の場合は後者) になります。最大文字幅によっては、あいまいなコード ポイントを防ぐためにバイトをパディングする必要がある場合があります。コードポイントまでエンコードする必要があるとしたら、すべての\uffffコードポイントに2 バイト、または 4 つの 16 進文字を使用する必要があります。

format(ord(temp), '04x')
于 2012-12-20T09:50:07.600 に答える