URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10028
[ Назад ]

Исходное сообщение
"Как в MS-Win ком.строке символ передать без потерь?"

Отправлено Aick , 21-Авг-15 15:55 
Вот Питон скрипт:

# -*- 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 off

chcp

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 ++++++++++++++++



Содержание

Сообщения в этом обсуждении
"Как в MS-Win ком.строке символ передать без потерь?"
Отправлено Pahanivo , 21-Авг-15 16:03 
консоль win кладезь идиотизма и подводных камней
пробуй заэкранить строку :) ''

"Как в MS-Win ком.строке символ передать без потерь?"
Отправлено Andrey Mitrofanov , 21-Авг-15 16:46 
> консоль win кладезь идиотизма и подводных камней

В данном случае, видимо - "две кодировки в консоли", ansi и oem.
search://internet/win command line character set ansi vs oem

Бороться бесполезно, сдавайтесь, все ваши базы.... Обойти можно, наверное, как с Бнопнёй -- контр-перекодировкой. Профессионалы Уиндоуз поправят, если наврал.

Даже и не//
> пробуй заэкранить строку :) ''


"Как в MS-Win ком.строке символ передать без потерь?"
Отправлено Aick , 24-Авг-15 15:41 
> В данном случае, видимо - "две кодировки в консоли", ansi и oem.
> search://internet/win command line character set ansi vs oem

Сделал так:


chcp 1252
python dash.py "z - z – z"

Оно ломает строки, зашитые внутри скрипта. Но в реальном скрипте ничего такого внутри нет и потому - Ок.

Спасибо!


"Как в MS-Win ком.строке символ передать без потерь?"
Отправлено Aick , 24-Авг-15 12:34 
> пробуй заэкранить строку :) ''

Не экранится. :)

Там ведь фокус в перекодировке, какую правильную задать в консоли. Как я догадываюсь. Тут экраны не должны бы помочь.