Python версия: 3.7
ОС: Server 2008 r2 - функционирует как сервер AD
Я запускаю скрипт на python для поиска dsquery через cmd, используя следующий код:
import subprocess
instruction = "dsquery user domainroot -samid 18129"
output = subprocess.run(instruction, stdout=subprocess.PIPE, shell=True)
Затем, чтобы получить мои результаты, я запускаю:
result = str(output.stdout.decode('ISO-8859-1'))
или
result = str(output.stdout.decode('utf-8'))
Я пробовал оба. Вообще говоря, это прекрасно работает, и у меня нет проблем. Я обычно получаю результат, похожий на
"CN=Joe Soap,OU=Students,dc=khs,dc=edu"
Но в тех немногих случаях в моей сети, когда у пользователей есть необычные символы в имени, такие как é или ë , я сталкиваюсь с ошибками. Принимая имя Джо Мыло
При декодировании с UTF-8 я получаю
"CN=Jo\x82 Soap,OU=Students,dc=khs,dc=edu"
И с ISO-8859-1 я получаю
"CN=Jo? Soap,OU=Students,dc=khs,dc=edu"
Наконец, если я запускаю команду cmd напрямую, я получаю правильный ответ:
"CN=Joé Soap,OU=Students,dc=khs,dc=edu"
Что мне здесь не хватает? Есть ли какая-то конкретная кодировка, которую я должен использовать, кроме двух, упомянутых выше (я пробовал несколько других безуспешно) или я что-то здесь упускаю?