После нескольких дней обитания над stackoverflow и python 2.7 doc я не пришел к выводу об этом.Python pipe cp1252 строка от PowerShell до сценария python (2.7)
В основном я запускаю скрипт python на сервере Windows, который должен иметь в качестве входного блока текст. Этот блок текста (к сожалению) имеет, который должен пройти по трубе. Что-то вроде:
PS > [something_that_outputs_text] | python .\my_script.py
Так что проблема:
сервер использует кодировку CP1252, и я действительно не могу изменить его в связи с административными правилами и этажерки. И когда я нажимаю текст на свой скрипт python, когда я его читаю, он приходит уже с ?
, тогда как символы типа \xe1
должны быть.
То, что я сделал до сих пор:
Испытано с UTF-8. Yep, chcp 65001
и $OutputEncoding = [Console]::OutputEncoding
«решайте его», так как в python отлично получается текст, а затем я могу его декодировать в unicode и т. Д. Но, по-видимому, они не позволяют мне делать это на сервере/в печатном виде.
небольшой скрипт, чтобы проверить, что, черт возьми, происходит:
import codecs
import sys
def main(argv=None):
if argv is None:
argv = sys.argv
if len(argv)>1:
for arg in argv[1:]:
print arg.decode('cp1252')
sys.stdin = codecs.getreader('cp1252')(sys.stdin)
text = sys.stdin.read().strip()
print text
return 0
if __name__=="__main__":
sys.exit(main())
Пробовал как с codecs
обертке и без него.
Мой вход & выход:
PS > echo "Blá" | python .\testinput.py blé
blé
Bl?
-> Таким образом, нет никаких проблем с аргументом (BLE), но централизованному текст (BLA) не годится :(
Я даже переоборудованный text
строку в шестнадцатеричную и, да, она получает залита 3f
(AKA мр ?
), так что это не проблема с print
.
[Кроме того: это мой первый вопрос здесь ... не стесняйтесь спрашивать больше информации о том, что я сделал]
EDIT
Я не знаю, если это уместно, или нет, но когда я do sys.stdin.encoding
он дает None
Обновление: Итак ... У меня нет проблем с cmd. Проверено sys.stdin.encoding
во время запуска программы на cmd, и все прошло хорошо. Я думаю, что моя голова просто взорвалась.
Просто хочу добавить, что я пока, к счастью, данный сервер Linux и все не работает из хорошо с кодировками ... Нет более PowerShell головных болей. – orestes