通过D-Bus发送字符串参数时出现unicode错误

时间:2015-09-28 16:04:21

标签: python unicode hex ascii wep

我尝试使用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

2 个答案:

答案 0 :(得分:0)

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

现在,并非每个字节序列都是有效的UTF-8,而您的数据可能不是。您的代码也没有帮助,因为它不包含您尝试解码的文件中的数据。您应该可以使用以下内容重现它​​:

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

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

答案 1 :(得分:0)

感谢@Ulrich Eckhardt的帮助。

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

dbus.ByteArray(pw.decode( '六角'))