![]() |
Не получается перенаправление Clipboard -> STDOUT и STDIN -> File в UTF-8 кодировке
Вложений: 3
Добрый вечер, уважаемые форумчане! Есть файл 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 В 1251 я работал с буфером обмена при помощи getclip.exe. Но в связи с тем, что он не поддерживает UTF-8, Код:
chcp 65001 && getclip.exe Код:
c:\nncron>chcp 65001 && nclip -o | c:\nncron\GnuWin32\bin\iconv.exe Код:
c:\nncron>chcp 65001 && nclip -o | c:\nncron\GnuWin32\bin\iconv.exe > out3.txt Так как же добиться, чтобы из буфера обмена передавался Unicode в окно командной строки? Я пока нашел такой способ: вставкой в окно cmd через Right MB. Шрифт в cmd выбран "Lucida console". Код:
c:\nncron>chcp Но мне надо, чтобы это делало какое-либо консольное приложение для работы с буфером обмена. Как это сделать? |
Вложений: 2
Вот еще 2 файла out.txt и out2.txt
|
A iconv зачем? взять из буфера обмена можно с помощью powershell:
Код:
powershell -c "add-type -assembly system.windows.forms; [windows.forms.clipboard]::gettext()" |
Вложений: 1
Цитата:
Код:
c:\nncron>chcp 65001 && cat out.txt Цитата:
|
|
Запустить powershell с параметром -STA(powershell -sta):
Код:
powershell -sta -c "add-type -assembly system.windows.forms; [windows.forms.clipboard]::gettext()" |
Kazun, А по умолчанию разве не STA?
Код:
> [System.Management.Automation.Runspaces.Runspace]::DefaultRunspace | ft version, apartmentstate -auto |
Начиная с 4 версии и выше.
|
Kazun, понятно
|
Цитата:
Код:
c:\nnCron>chcp 65001 Видать, pclip, nclip, getclip, clop и иже с ними делались исключительно под определенную кодовую страницу и не предназначены для работы с Unicode. А вот PowerShell с его gettext() способен это сделать. Проблему с кодировкой при выводе в файл решил, по-видимому, при открытии файла AkelPad пытается ее распознать и у него не всегда это корректно получается, особенно, когда в файле байты разных алфавитов и пытается подобрать что-то свое. При установке кодировки в Akelpad вручную (ПКМ по строке состояния) все прекрасно распознается. |
Foreigner, Kazun, только сейчас заметил, что длина строки в output ограничена шириной буфера экрана cmd. Можно как-то снять это ограничение?
Попробовал настроить Microsoft.PowerShell_profile, указав в нем значение $buffer.Width = 99999 (большее 9999), но при старте консоли PS: Код:
Windows PowerShell Код:
c:\>powershell -sta -c "add-type -assembly system.windows.forms; [windows.forms.clipboard]::gettext()" > out.txt |
Код:
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' |
Foreigner, то есть, получается, что при перенаправлении неявно работает «Out-File»?
|
Iska, Просто у него есть параметры по умолчанию, в данном случае ширина строки равна ширине консоли. Параметр width переписывает эти установки. Я так понимаю. А простое перенаправление ">" это и есть out-file без параметров (так вроде объяснял Kazun, могу и ошибаться)
|
Цитата:
|
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" И еще команда help выдает нехватку памяти. Код:
PS C:\> help out-file -parameter 'width' |
Цитата 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 |
Время: 15:08. |
Время: 15:08.
© OSzone.net 2001-