1

Python dbus モジュールを使用して WEP セキュリティ WiFi に接続しようとしています

次のようにネットワーク構成辞書を埋めます。

nw_config['wep_key0'] = binascii.unhexlify(mypassword)

mypassword は 16 進文字列です

mypassword が「12345678」に設定されている場合はエラーにはなりませんが、a、b、c、d、e、f などの英字の場合はエラーになります。

例えば:

nw_config['wep_key0'] = binascii.unhexlify('abcdef')

次のエラーが表示されます

UnicodeError: D-Bus 経由で送信される文字列パラメーターは、文字以外のコード ポイントのない有効な UTF-8 でなければなりません

これらはすべて有効な 16 進文字列でなければならないため、これら 2 つのケースの違いがわかりませんか?

更新:dbusに関連するコード

args = dbus.Dictionary(nw_config)
bus = dbus.SystemBus()
wpas_obj = bus.get_object(WPAS_DBUS_SERVICE, WPAS_DBUS_PATH)
wpas = dbus.Interface(wpas_obj, WPAS_DBUS_SERVICE)
if_obj = bus.get_object(WPAS_DBUS_SERVICE, path)
path = wpas.GetInterface(if_obj, WPAS_DBUS_IFACE)
network = iface.AddNetwork(args)    # this line has problem
4

2 に答える 2

0

すべての文字だけでなく、16 進数の 8 と 9 にも最上位ビットが設定されています。これがバイトの上位ニブルで発生した場合、このバイトはマルチバイト UTF-8 シーケンスの一部にすぎません。詳細な説明については、UTF-8 に関するウィキペディアの記事を参照してください。

現在、すべてのバイト シーケンスが有効な UTF-8 であるとは限りません。データはおそらくそうではありません。デコードしようとしているファイルのデータが含まれていないため、コードも役に立ちません。次のような方法で再現できるはずです。

data = '0123456789abcdef'
bytes = unhexlify(data)
string = bytes.decode('UTF-8')

3 行目にエラーが表示されるはずです。

于 2015-09-28T18:03:04.777 に答える
0

@Ulrich Eckhardt の助けに感謝します。

pw という名前の 16 進文字列の wep キーがあるとします。次に、このキーを dbus で正常に送信するには、次の手順を実行する必要があります。

dbus.ByteArray(pw.decode('hex'))

于 2015-10-01T15:12:00.530 に答える