Вот Питон скрипт:
# -*- coding: utf-8 -*-from __future__ import print_function
import systextInternal = "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 ++++++++++++++++
консоль win кладезь идиотизма и подводных камней
пробуй заэкранить строку :) ''
> консоль win кладезь идиотизма и подводных камнейВ данном случае, видимо - "две кодировки в консоли", ansi и oem.
search://internet/win command line character set ansi vs oemБороться бесполезно, сдавайтесь, все ваши базы.... Обойти можно, наверное, как с Бнопнёй -- контр-перекодировкой. Профессионалы Уиндоуз поправят, если наврал.
Даже и не//
> пробуй заэкранить строку :) ''
> В данном случае, видимо - "две кодировки в консоли", ansi и oem.
> search://internet/win command line character set ansi vs oemСделал так:
chcp 1252
python dash.py "z - z – z"Оно ломает строки, зашитые внутри скрипта. Но в реальном скрипте ничего такого внутри нет и потому - Ок.
Спасибо!
> пробуй заэкранить строку :) ''Не экранится. :)
Там ведь фокус в перекодировке, какую правильную задать в консоли. Как я догадываюсь. Тут экраны не должны бы помочь.