Вот Питон скрипт:
# -*- coding: utf-8 -*-from __future__ import print_function
import sys
textInternal = "x - x – x"
textCLIArg = sys.argv[1]
print("Internal:", textInternal)
print("From CLI:", textCLIArg)
Запускаю скрипт (внимание, в аргументе два разных символа тире, т.е. разные коды символов):
python dash.py "z - z – z"
Если запускать в Никс системах, в Эклипсе под Винду, то кодировка строк аргументов во всех консолях всюду "правильная", работает "как надо". Кроме cmd.exe.
В cmd.exe получаю ответ, где "длинное" тире "поломано":
Internal: x - x – x
From CLI: z - z – z
Вопрос: как в cmd.exe правильно передавать это тире в ком строке?
Или - как правильно обрабатывать "такую" строку?
Строка-то обычная. Но, вилимо, надо как-то устанавливать/проверять кодировку снаружи. Так-то, вроде, сам скрипт "правильный"?
P.S.
Ещё последовательность запусков. Там можно наколдовать "правильное" тире. Между командами
echo ----------------
оно отдаёт правильный символ. Наколдовано на Вин7.
@echo offchcp
set cliText=z - z – z
chcp 1251
python dash.py "z - z – z"
echo ----------------
python dash.py "%cliText%"
echo ----------------
chcp 866
set cliText=z - z – z
python dash.py "z - z – z"
python dash.py "%cliText%"
chcp 1251
set cliText=z - z – z
python dash.py "z - z – z"
python dash.py "%cliText%"
chcp 65001
set cliText=z - z – z
python dash.py "z - z – z"
python dash.py "%cliText%"
echo ++++++++++++++++