Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Не получается перенаправление Clipboard -> STDOUT и STDIN -> File в UTF-8 кодировке

Ответить
Настройки темы
Любой язык - [решено] Не получается перенаправление Clipboard -> STDOUT и STDIN -> File в UTF-8 кодировке

Аватара для x_seed@vk

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: x_seed@vk
Дата: 28-06-2015
Описание: не прикрепил файлы
Изображения
Тип файла: jpg cmd.jpg
(121.9 Kb, 1 просмотров)
Тип файла: jpg cmd2.jpg
(49.3 Kb, 1 просмотров)
Вложения
Тип файла: txt out3.txt
(1.6 Kb, 0 просмотров)
Добрый вечер, уважаемые форумчане! Есть файл out.txt, сохраненный в кодировке 65001 (UTF-8) через AkelPad. При попытке выполнить
Код: Выделить весь код
chcp 65001 && cat out.txt | c:\nncron\GnuWin32\bin\iconv.exe
Текст в консоль выводится нормально. А при выполнении
Код: Выделить весь код
chcp 65001 && cat out.txt | c:\nncron\GnuWin32\bin\iconv.exe > out2.txt
файл out2.txt при открытии AkelPad'ом в строке состояния определяется как 1251 (ANSI - кириллица). Как сделать, чтобы выходной файл out2.txt был в той же кодировке, что и входной?

В 1251 я работал с буфером обмена при помощи getclip.exe. Но в связи с тем, что он не поддерживает UTF-8,
Код: Выделить весь код
chcp 65001 && getclip.exe
в консольное окно ничего не выводят. Хотелось бы найти достойную замену getclip. Попробовал nclip, но при chcp 65001 он выводит в консоль квадратики и портит кодировку у символа ö (cmd.jpg):
Код: Выделить весь код
c:\nncron>chcp 65001 && nclip -o | c:\nncron\GnuWin32\bin\iconv.exe
Active code page: 65001
<tr xmlns="http://www.w3.org/1999/xhtml"><td align="left" nowrap=""><small>��������</small></td></tr>
<tr xmlns="http://www.w3.org/1999/xhtml"><td><select multiple="multiple" class="or done chosen" style="width: 236px; display: none;" id="props_manufilter" name="props_manufilter">
<option value="">���</option>
<option value="13562">AEG</option>
<option value="13564">Bomann</option>
<option value="13565">Bosch</option>
<option value="14021">Campingaz</option>
<option value="14098">Char-Broil</option>
<option value="13382">Clatronic</option>
<option value="13581">Cloer</option>
<option value="14045">Cuisinart</option>
<option value="13582">DeLonghi</option>
<option value="13849">DS Produkte</option>
<option value="13833">Efbe Schott</option>
<option value="11090">Electrolux</option>
<option value="10404">Grundig</option>
<option value="13568">Krups</option>
<option value="14028">Landmann</option>
<option value="14016">Lotus Grill</option>
<option value="12139">Medion</option>
<option value="13684">Petra</option>
<option value="10213">Philips</option>
<option value="13609">Rommelsbacher</option>
<option value="13881">Rosle</option>
<option value="13698">Russell Hobbs</option>
<option value="13836">Salco</option>
<option value="13611">Severin</option>
<option value="13742">Siemens</option>
<option value="13667">Steba</option>
<option value="13715">Suntec</option>
<option value="13572">Tefal</option>
<option value="10315">Thomson</option>
<option value="13573">Unold</option>
<option value="10184">Verschiedene</option>
</select></td></tr>
а в файл
Код: Выделить весь код
c:\nncron>chcp 65001 && nclip -o | c:\nncron\GnuWin32\bin\iconv.exe > out3.txt
- то же самое - 1251 (ANSI - кириллица), но при этом AkelPad в отличие от cmd, видит русские символы.

Так как же добиться, чтобы из буфера обмена передавался Unicode в окно командной строки?
Я пока нашел такой способ: вставкой в окно cmd через Right MB. Шрифт в cmd выбран "Lucida console".
Код: Выделить весь код
c:\nncron>chcp
Active code page: 65001

c:\nncron><option value="13881">Rösle</option>
The syntax of the command is incorrect.

c:\nncron>chcp 1251
Текущая кодовая страница: 1251

c:\nncron><option value="13881">Rösle</option>
Ошибка в синтаксисе команды.
но я при этом в недоумении, т.к. вставка проходит вполне корректно и при chcp 1251, хотя там нет символа ö. ()cmd2.jpg
Но мне надо, чтобы это делало какое-либо консольное приложение для работы с буфером обмена. Как это сделать?

Отправлено: 21:23, 28-06-2015

 

Аватара для x_seed@vk

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Вложения
Тип файла: txt out2.txt
(1.6 Kb, 1 просмотров)
Тип файла: txt out.txt
(1.6 Kb, 2 просмотров)

Вот еще 2 файла out.txt и out2.txt

-------
_ttp://freebitco.in/?r=3433719 Win Free Bitcoins every hour!


Последний раз редактировалось x_seed@vk, 28-06-2015 в 21:37. Причина: не прикрепил файлы


Отправлено: 21:35, 28-06-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 1518
Благодарности: 846

Профиль | Отправить PM | Цитировать


A iconv зачем? взять из буфера обмена можно с помощью powershell:
Код: Выделить весь код
powershell -c "add-type -assembly system.windows.forms; [windows.forms.clipboard]::gettext()"

Последний раз редактировалось Foreigner, 28-06-2015 в 22:47.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:30, 28-06-2015 | #3


Аватара для x_seed@vk

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Изображения
Тип файла: jpg powershell.jpg
(35.5 Kb, 8 просмотров)

Цитата Foreigner:
A iconv зачем?
Не знаю, без iconv текст помещается в консоль кодированным. Если в файле исходная кодировка UTF-8, то при использовании команды cat без iconv он кодируется однобайтной кодировкой (по-видимому Windows-1251) (наверное, это такая реализация unixutils cat.exe, но это лишь мое предположение).
Код: Выделить весь код
c:\nncron>chcp 65001 && cat out.txt
Active code page: 65001
<tr xmlns="http://www.w3.org/1999/xhtml"><td align="left" nowrap=""><small>водитель</small></td></tr>
<tr xmlns="http://www.w3.org/1999/xhtml"><td><select multiple="multiple" class="or done chosen" style="width: 236px; display: none;" id="props_manufilter" name="props_manufilter">
<option value="">РІСЃРµ</option>
<option value="13562">AEG</option>
<option value="13564">Bomann</option>
<option value="13565">Bosch</option>
<option value="14021">Campingaz</option>
<option value="14098">Char-Broil</option>
<option value="13382">Clatronic</option>
<option value="13581">Cloer</option>
<option value="14045">Cuisinart</option>
<option value="13582">DeLonghi</option>
<option value="13849">DS Produkte</option>
<option value="13833">Efbe Schott</option>
<option value="11090">Electrolux</option>
<option value="10404">Grundig</option>
<option value="13568">Krups</option>
<option value="14028">Landmann</option>
<option value="14016">Lotus Grill</option>
<option value="12139">Medion</option>
<option value="13684">Petra</option>
<option value="10213">Philips</option>
<option value="13609">Rommelsbacher</option>
<option value="13881">Rösle</option>
<option value="13698">Russell Hobbs</option>
<option value="13836">Salco</option>
<option value="13611">Severin</option>
<option value="13742">Siemens</option>
<option value="13667">Steba</option>
<option value="13715">Suntec</option>
<option value="13572">Tefal</option>
<option value="10315">Thomson</option>
<option value="13573">Unold</option>
<option value="10184">Verschiedene</option>
</select></td></tr>
Цитата Foreigner:
взять из буфера обмена можно с помощью powershell:
Код: Выделить весь код
powershell -c "add-type -assembly system.windows.forms; [windows.forms.clipboard]::gettext()" »
Что-то у меня не выводится текст из буфера обмена в консоль powershell с помощью вашей команды. Прилагаю скриншот. Как вы это делаете? Я просто новичок в powershell...

Отправлено: 00:20, 30-06-2015 | #4


Ветеран


Contributor


Сообщения: 1518
Благодарности: 846

Профиль | Отправить PM | Цитировать


Цитата x_seed@vk:
chcp 65001 && cat out.txt »
А нафига извращаться с cat.exe, нельзя как все простые люди использовать type?
Код: Выделить весь код
chcp 65001
type out.txt
Цитата x_seed@vk:
Как вы это делаете? »
Так и делаю, почему у вас не работает не знаю.

Отправлено: 08:40, 30-06-2015 | #5


Ветеран


Microsoft MVP


Сообщения: 1114
Благодарности: 748

Профиль | Отправить PM | Цитировать


Запустить powershell с параметром -STA(powershell -sta):
Код: Выделить весь код
powershell -sta -c "add-type -assembly system.windows.forms; [windows.forms.clipboard]::gettext()"
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:00, 30-06-2015 | #6


Ветеран


Contributor


Сообщения: 1518
Благодарности: 846

Профиль | Отправить PM | Цитировать


Kazun, А по умолчанию разве не STA?
Код: Выделить весь код
 > [System.Management.Automation.Runspaces.Runspace]::DefaultRunspace | ft version, apartmentstate -auto

Version ApartmentState
------- --------------
4.0                STA

Отправлено: 09:31, 30-06-2015 | #7


Ветеран


Microsoft MVP


Сообщения: 1114
Благодарности: 748

Профиль | Отправить PM | Цитировать


Начиная с 4 версии и выше.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:36, 30-06-2015 | #8


Ветеран


Contributor


Сообщения: 1518
Благодарности: 846

Профиль | Отправить PM | Цитировать


Kazun, понятно

Отправлено: 09:37, 30-06-2015 | #9


Аватара для x_seed@vk

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата Kazun:
Запустить powershell с параметром -STA »
Kazun, сделал как вы сказали, помогло, сразу вывел строки из clipboard в cmd в нужной кодировке:
Код: Выделить весь код
c:\nnCron>chcp 65001
Active code page: 65001

c:\nnCron>powershell -sta -c "add-type -assembly system.windows.forms; [windows.forms.clipboard]::gettext()"
<tr><td nowrap="" align="left"><small>итель</small></td></tr>
<tr><td><select name="props_manufilter" id="props_manufilter" style="width: 236
px; display: none;" class="or done chosen" multiple="multiple">
<option value="">все</option>
<option value="13562">AEG</option>
<option value="13564">Bomann</option>
<option value="13565">Bosch</option>
<option value="14021">Campingaz</option>
<option value="14098">Char-Broil</option>
<option value="13382">Clatronic</option>
<option value="13581">Cloer</option>
<option value="14045">Cuisinart</option>
<option value="13582">DeLonghi</option>
<option value="13849">DS Produkte</option>
<option value="13833">Efbe Schott</option>
<option value="11090">Electrolux</option>
<option value="10404">Grundig</option>
<option value="13568">Krups</option>
<option value="14028">Landmann</option>
<option value="14016">Lotus Grill</option>
<option value="12139">Medion</option>
<option value="13684">Petra</option>
<option value="10213">Philips</option>
<option value="13609">Rommelsbacher</option>
<option value="13881">Rösle</option>
<option value="13698">Russell Hobbs</option>
<option value="13836">Salco</option>
<option value="13611">Severin</option>
<option value="13742">Siemens</option>
<option value="13667">Steba</option>
<option value="13715">Suntec</option>
<option value="13572">Tefal</option>
<option value="10315">Thomson</option>
<option value="13573">Unold</option>
<option value="10184">Verschiedene</option>
</select></td></tr>
Спасибо за совет!
Видать, pclip, nclip, getclip, clop и иже с ними делались исключительно под определенную кодовую страницу и не предназначены для работы с Unicode. А вот PowerShell с его gettext() способен это сделать.
Проблему с кодировкой при выводе в файл решил, по-видимому, при открытии файла AkelPad пытается ее распознать и у него не всегда это корректно получается, особенно, когда в файле байты разных алфавитов и пытается подобрать что-то свое. При установке кодировки в Akelpad вручную (ПКМ по строке состояния) все прекрасно распознается.

-------
_ttp://freebitco.in/?r=3433719 Win Free Bitcoins every hour!


Отправлено: 03:15, 01-07-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Не получается перенаправление Clipboard -> STDOUT и STDIN -> File в UTF-8 кодировке

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Создание и запись в файл в кодировке 1200 (UTF 16 LE) eus_deus AutoIt 5 08-09-2013 00:01
Кодирование и декодирование UTF-8,UTF-16? Killer_13 Хочу все знать 5 10-02-2012 00:00
VBS/WSH/JS - [решено] Как создать файл в кодировке UTF-8 с помощью VBScript? Zeron Скриптовые языки администрирования Windows 2 30-05-2011 03:50
Запуск доп.программы по условию в консоли(STDOUT) первой. Dobrinia AutoIt 3 18-01-2011 12:31
Не отображаются нормально в mc-light тексты в utf кодировке Dezz Программное обеспечение Linux и FreeBSD 8 26-05-2005 08:10




 
Переход