子进程stdout解码字符串不适用于希腊字母

时间:2019-10-14 19:39:02

标签: python subprocess decode unicode-string netsh

我使用以下子流程调用c = subprocess.Popen("wmic nic where 'netconnectionid like '%οπικ%' and PhysicalAdapter=True' get netconnectionid",stdout=subprocess.PIPE)。我想做的就是传递netconnectionid(又称网络适配器名称),这样我就可以将其传递给变量并在此处使用

ip = self.ip_list.currentText() subprocess.Popen('netsh interface ipv4 set address name="' + sk + '" static 192.168.131.' + ip + ' 255.255.255.0 192.168.131.1')

我这样做是因为适配器名称在不同的pc中不同。问题在这里:

os = c.stdout.read()

sk = os.splitlines()[2].strip().decode('cp437')

结果是'Τοπικήσύνδεση'。我正在尝试将字节转换为希腊字母。我尝试过utf-8,但它不起作用。我尝试使用.decode('cp437')打印sk变量,并且它是唯一可以正确执行的解码选项,但是之后,netsh命令仍然无法正常工作。我尝试使用英文字母重命名适配器并使用utf-8解码,效果很好。这就是我基本上要转换的内容:

b'\xe7?\xe3??? \xe5??\xeb\xee\xe5?'

关于如何进行这项工作的任何想法?

1 个答案:

答案 0 :(得分:0)

尝试使用 utf-8 编码。

greek_string = 'Τοπική σύνδεση'
encoded_string = greek_string.encode('utf-8')
decoded_string = encoded_string.decode()
print('Original: {}\n\nEncoded: {}\nDecoded: {}'.format(greek_string, 
                                                        encoded_string, 
                                                        decoded_string))

输出

Original: Τοπική σύνδεση

Encoded: b'\xce\xa4\xce\xbf\xcf\x80\xce\xb9\xce\xba\xce\xae \xcf\x83\xcf\x8d\xce\xbd\xce\xb4\xce\xb5\xcf\x83\xce\xb7'
Decoded: Τοπική σύνδεση