通过DBus发送字符串参数时出现unicode错误

2024-05-29 01:53:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

我的密码是十六进制字符串

当mypassword设置为“12345678”时,不会出现错误,但当它以英文字母(如a、b、c、d、e、f)出现时,将不会出现错误

例如:

^{pr2}$

它将显示以下错误

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

Tags: 字符串代码configobjget错误serviceargs
2条回答

谢谢@Ulrich Eckhardt的帮助。在

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

在dbus.ByteArray公司(密码解码(‘十六进制’)

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

现在,不是每个字节序列都是有效的UTF-8,而您的数据可能不是。您的代码也没有帮助,因为它不包括您试图解码的文件中的数据。你应该可以用这样的方法复制它:

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

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

相关问题 更多 >

    热门问题