The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как в MS-Win ком.строке символ передать без потерь?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Python)
Изначальное сообщение [ Отслеживать ]

"Как в MS-Win ком.строке символ передать без потерь?"  +/
Сообщение от Aick on 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 ++++++++++++++++


Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как в MS-Win ком.строке символ передать без потерь?"  +/
Сообщение от Pahanivo (ok) on 21-Авг-15, 16:03 
консоль win кладезь идиотизма и подводных камней
пробуй заэкранить строку :) ''
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

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

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

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

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

Сделал так:


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

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

Спасибо!

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру