Как преобразовать пакетный файл, хранящийся в utf-8, во что-то, что работает через другой пакетный файл, и запустить его

У меня есть программа, которую я использую для создания командного файла. Моя проблема в том, что вывод программы - UTF-8, поэтому, как только в моем пакетном файле появляются диакритические метки, такие как é, à, ö, Ä, происходит сбой. Кажется, я не могу найти способ преобразовать мой вывод во что-нибудь кроме UTF-8 в программе, которая создает командный файл.

Так что я думал о создании двух файлов Баха. Фактическое и другое, которое преобразует фактическое из UTF-8 в ANSI (кодовая страница Windows 1252 или, возможно, cp 850), а затем выполняет его после этого. Конечно, я бы добавил chcp xxxx в качестве первой команды фактического командного файла.

Поэтому мой вопрос: есть ли альтернатива iconv в Windows - или как преобразовать текстовый файл UTF-8 в кодовую страницу Windows, используя второй пакетный файл. Есть ли что-нибудь встроенное в Win XP и выше, что я мог бы использовать, или есть бесплатный и распространяемый инструмент, который я мог бы использовать для этого?

Примечание:

chcp 65001

не работает для пакетных файлов.

РЕДАКТИРОВАТЬ 1:

В Windows XP я создал два командных файла для проверки первого ответа.

1.bat, закодированный в UTF-8 без спецификации, содержит:

chcp 1252
cd üöä

2.bat также кодируется в UTF-8 без BOM - но без каких-либо специальных символов содержит:

chcp 1252
type "1.bat" >"ansi_file.bat"

Результирующий файл ansi_file.bat, созданный при выполнении 2.bat, будет по-прежнему кодироваться в формате utf-8, а не в кодировке ANSI.

РЕДАКТИРОВАТЬ 2:

Упомянутый обратный процесс работает.

chcp 1252
echo ü > ansi.txt
cmd /u /c type ansi.txt > unicode.txt

но ни одна из следующих последующих строк

cmd /a /c type unicode.txt > back2ansi.txt
type unicode.txt > back2ansi_v2.txt

возвращает меня в ANSI. Я пробовал это как на Win XP и Win 7. Кто-нибудь может помочь?

НОТА:

Я знаю, как использовать Windows Script Host и VBS. Я бы хотел избежать зависимости от хоста скрипта. Метод VBS подробно описан здесь:http://msdn.microsoft.com/en-us/library/windows/desktop/aa368046%28v=vs.85%29.aspx

РЕДАКТИРОВАТЬ 3:

Созданный текстовый файл, содержащий Unicode ü выше, не является utf-8

Файл Unicode для Windows - HEX:

FC 00 20 00 0D 00 0A 00

UTF-8 без спецификации будет HEX:

C3 BC 20 0D 0A

Решение VBS, связанное с, работает только с формой Unicode, но не работает в форме UTF-8. Мне нужно конвертировать UTF-8 в другую кодовую страницу, так что даже эта, кажется, не работает для меня ...

Ответы на вопрос(3)

Вы можете получить много утилит командной строки GNU изGnuWin32 проект. Это включаетiconv (и многое другое):

C:\> iconv.exe -f UTF-8 -t WINDOWS-1252 input.bat > output.bat
 C.O.04 нояб. 2012 г., 01:07
Спасибо, я упомянул Iconv в этом вопросе, но я не ищу распространяемой дополнительной программы, но предпочел бы решение, использующее то, с чем поставляется Windows.

iconv" для преобразования между кодировками:

iconv --from-code UTF-8 --to-code iso-8859-1 -c inputfile > outputfile

Кажется, сборка для Windows доступна наhttp://gnuwin32.sourceforge.net/packages/libiconv.htm

 C.O.04 нояб. 2012 г., 01:06
Спасибо, я упомянул Iconv в этом вопросе, но я не ищу распространяемой дополнительной программы, но предпочел бы решение, использующее то, с чем поставляется Windows.
Решение Вопроса

что не хотите полагаться на хост скрипта, но нет собственной пакетной команды, которая могла бы делать то, что вы хотите. Вы собираетесь использоватьчто-то за пределами чистой партии. Хост скрипта является родным для Windows, поэтому я думаю, что это не будет проблемой.

ПоследующийUTF8toANSI.vbs Скрипт преобразует UTF-8 (с или без спецификации) в ISO-8859-1 (в основном то же, что кодовая страница 1252). Это адаптировано изVB6 / VbScsript изменить файл / записать файл с кодировкой в ansii.

Option Explicit

Private Const adReadAll = -1
Private Const adSaveCreateOverWrite = 2
Private Const adTypeBinary = 1
Private Const adTypeText = 2
Private Const adWriteChar = 0

Private Sub UTF8toANSI(ByVal UTF8FName, ByVal ANSIFName)
  Dim strText

  With CreateObject("ADODB.Stream")
    .Open
    .Type = adTypeBinary
    .LoadFromFile UTF8FName
    .Type = adTypeText
    .Charset = "utf-8"
    strText = .ReadText(adReadAll)
    .Position = 0
    .SetEOS
    .Charset = "iso-8859-1"
    .WriteText strText, adWriteChar
    .SaveToFile ANSIFName, adSaveCreateOverWrite
    .Close
  End With
End Sub

UTF8toANSI WScript.Arguments(0), WScript.Arguments(1)

Сценарий VBS должен находиться в вашем текущем каталоге или на вашем пути.

Пакетный скрипт для конвертации и запуска вашего UTF8-закодированного скрипта может выглядеть примерно так:

@echo off
UTF8toANSI "utf8.bat" "ansi.bat"
ansi.bat


Оригинальный ответ: ниже мой оригинальный ответ, который работает для UTF-16 с спецификацией, но не для UTF-8

Вывод внутренних команд автоматически преобразуется в ANSI, если вывод передается по конвейеру или перенаправляется в файл.

chcp 1252
type "utf_file.bat" >"ansi_file.bat"

Процесс может идти в обратном порядке, если CMD запускается с/U вариант, но, к сожалению, байты заголовка Unicode будут отсутствовать. Но, конечно, это не проблема для вашей ситуации.

 dbenham04 нояб. 2012 г., 17:02
@ C.O. - Я добавил работающее решение UTF-8.
 C.O.04 нояб. 2012 г., 02:35
Этот ответ в настоящее время неверен. тип "input.bat"> "output.bat" работает только для входного файла Unicode с кодировкой UCS-2 с надлежащей меткой порядка байтов. UTF-8! = USC-2.
 C.O.29 окт. 2012 г., 23:37
Я добавил то, что я пытался найти в своем вопросе, чтобы вы могли на него посмотреть.
 C.O.29 окт. 2012 г., 23:12
Я пытаюсь это с Win XP, но не могу заставить его работать, можете ли вы уточнить еще?
 C.O.02 нояб. 2012 г., 00:09
Я добавил больше информации к вопросу и начал щедрость, поскольку я до сих пор не могу сделать эту работу ...

Ваш ответ на вопрос