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

Компьютерный форум 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, 2 просмотров)
Тип файла: jpg cmd2.jpg
(49.3 Kb, 2 просмотров)
Вложения
Тип файла: txt out3.txt
(1.6 Kb, 2 просмотров)
Добрый вечер, уважаемые форумчане! Есть файл 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 | Цитировать


Foreigner, Kazun, только сейчас заметил, что длина строки в output ограничена шириной буфера экрана cmd. Можно как-то снять это ограничение?
Попробовал настроить Microsoft.PowerShell_profile, указав в нем значение $buffer.Width = 99999 (большее 9999), но при старте консоли PS:
Код: Выделить весь код
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

Exception setting "BufferSize": "Cannot set the buffer size because the size specified is too large or too small.
Parameter name: value
Actual value was 99999,9999."
At C:\Users\054\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1:6 char:10
+ $console. <<<< BufferSize = $buffer
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyAssignmentException
Вы что-нибудь знаете о причинах такого поведения powershell? Как сделать так, чтобы при исполнении
Код: Выделить весь код
c:\>powershell -sta -c "add-type -assembly system.windows.forms; [windows.forms.clipboard]::gettext()" > out.txt
в текстовом файле строки не ограничивались длиной, равной ширине буфера консоли?

Отправлено: 01:47, 19-12-2015 | #11



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

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


Ветеран


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

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


Код: Выделить весь код
c:\>powershell -sta -c "add-type -assembly system.windows.forms; [windows.forms.clipboard]::gettext() | out-file -width 999 out.txt"
Код: Выделить весь код
> help out-file -parameter 'width'

-Width <Int32>
    Specifies the number of characters in each line of output. Any additional characters are truncated, not w
    rapped. If you omit this parameter, the width is determined by the characteristics of the host. The defau
    lt for the Windows PowerShell console is 80 (characters).

Последний раз редактировалось Foreigner, 19-12-2015 в 09:55.

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

Отправлено: 08:55, 19-12-2015 | #12


Ветеран


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

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


Foreigner, то есть, получается, что при перенаправлении неявно работает «Out-File»?

Отправлено: 12:18, 19-12-2015 | #13


Ветеран


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

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


Iska, Просто у него есть параметры по умолчанию, в данном случае ширина строки равна ширине консоли. Параметр width переписывает эти установки. Я так понимаю. А простое перенаправление ">" это и есть out-file без параметров (так вроде объяснял Kazun, могу и ошибаться)

Отправлено: 12:36, 19-12-2015 | #14


Ветеран


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

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


Цитата Foreigner:
А простое перенаправление ">" это и есть out-file без параметров (так вроде объяснял Kazun, могу и ошибаться) »
Я именно про это. Спасибо, ясно.

Отправлено: 12:49, 19-12-2015 | #15


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

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


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

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


Foreigner, заработало, спасибо, для использования кодировки UTF-8 в выходном файле я использовал доп параметр Encoding.
Код: Выделить весь код
powershell -sta -c "add-type -assembly system.windows.forms; [windows.forms.clipboard]::gettext() | out-file -width 20 -Encoding utf8 out.txt"
Только вот параметр -width не работает должным образом. Т.е. вне зависимости от того, какое значение 20 или 999, длина строки в выходном файле получается неограниченной. Что и нужно, но как-то странно срабатывает.
И еще команда help выдает нехватку памяти.
Код: Выделить весь код
PS C:\> help out-file -parameter 'width'
Not enough memory.

Отправлено: 00:31, 27-12-2015 | #16


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

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


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

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


Цитата x_seed@vk:
Видать, pclip, nclip, getclip, clop и иже с ними делались исключительно под определенную кодовую страницу и не предназначены для работы с Unicode. А вот PowerShell с его gettext() способен это сделать. »
Нашел еще одну утилиту paste.exe с http://www.c3scripts.com/tutorials/msdos/paste.html (не путать с paste.exe из unixutils, как я), которая прекрасно справилась с этой задачей. Достаточно выставить codepage в utf8:
Код: Выделить весь код
chcp 65001 && paste.exe
и текст выведется на консоль в utf-8, как положено.

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


Отправлено: 02:55, 27-12-2015 | #17



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Не отображаются нормально в mc-light тексты в utf кодировке Dezz Программное обеспечение Linux и FreeBSD 9 10-05-2020 22:22
[решено] Создание и запись в файл в кодировке 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




 
Переход