1

我尝试使用 python dbus 模块连接到 WEP 安全 WiFi

我填写网络配置字典如下:

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

mypassword 是十六进制字符串

当 mypassword 设置为 '12345678' 时不会出错,但是当它输入英文字母时,如 a、b、c、d、e、f。

例如:

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

它将显示以下错误

UnicodeError:要通过 D-Bus 发送的字符串参数必须是有效的 UTF-8,没有非字符代码点

只是不明白这两种情况之间有什么区别,因为它们都应该是有效的十六进制字符串?

更新: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

所有字母,还有十六进制数字 8 和 9 都设置了最高位。当这发生在字节的高半字节时,该字节只能是多字节 UTF-8 序列的一部分。查看有关 UTF-8 的 Wikipedia 文章以获得进一步的解释。

现在,并非每个字节序列都是有效的 UTF-8,而且您的数据可能不是。您的代码也无济于事,因为它不包含您尝试解码的文件中的数据。你应该能够用这样的东西来重现它:

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

您应该在第三行得到错误。

于 2015-09-28T18:03:04.777 回答
0

感谢@Ulrich Eckhardt 的帮助。

假设您有一个名为 pw 的十六进制字符串 wep 密钥。然后您必须执行以下操作才能在 dbus 中成功传输此密钥:

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

于 2015-10-01T15:12:00.530 回答