Строка декодирования подпроцесса stdout не будет работать с греческими буквами - PullRequest
0 голосов
/ 14 октября 2019

Я использую следующий вызов подпроцесса 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')

Я делаю это, потому что адаптеримена отличаются в разных шт. Проблема здесь:

os = c.stdout.read()

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

В результате получается 'Τοπική σύνδεση'. Я пытаюсь преобразовать байты в греческие буквы. Я пыталсяUTF-8, и это не работает. Я попытался напечатать переменную sk с помощью .decode ('cp437') и единственную опцию декодирования, которая работает правильно, но после этого команда netsh все равно не будет работать. Я попытался переименовать адаптер с английскими буквами и декодировать с помощью utf-8, и этоработает так хорошо. Вот что я в основном хочу конвертировать:

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

Есть идеи, как заставить эту работу работать?

1 Ответ

0 голосов
/ 14 октября 2019

Попробуйте использовать кодировку 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: Τοπική σύνδεση
...