我尝试使用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
答案 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( '六角'))