在创建批处理文件的程序中,我似乎无法找到将输出转换为除UTF-8之外的任何内容的方法.
所以我想创建两个bach文件.实际的一个和另一个将实际的一个从UTF-8转换为ANSI(Windows代码页1252,或者可能是cp 850)然后在之后执行它.当然我会添加一个chcp xxxx作为实际批处理文件的第一个命令.
所以我的问题是Windows上有iconv的替代方案 – 或者如何使用第二个批处理文件将UTF-8文本文件转换为Windows代码页.是否有任何内置于Win XP及其中的内容我可以使用或者是否有可用于此的免费和可再发行工具?
注意:
chcp 65001
不适用于批处理文件.
编辑1:
在Windows XP上,我创建了两个批处理文件来测试第一个答案.
1.bat编码为UTF-8而不包含BOM包含:
chcp 1252 cd üöä
2.bat也编码为UTF-8而没有BOM – 但没有任何特殊字符包含:
chcp 1252 type "1.bat" >"ansi_file.bat"
在执行2.bat时创建的结果ansi_file.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脚本宿主和VBS.我想避免依赖脚本主机. VBS方法详述如下:http://msdn.microsoft.com/en-us/library/windows/desktop/aa368046%28v=vs.85%29.aspx
编辑3:
创建的包含unicodeü的文本文件不是utf-8
Windows unicode文件是HEX:
FC 00 20 00 0D 00 0A 00
没有BOM的UTF-8将是HEX:
C3 BC 20 0D 0A
链接的VBS解决方案仅适用于unicode表单,但在UTF-8表单上失败.
我需要将UTF-8转换为另一个代码页,所以即使那个似乎对我有用……
以下UTF8toANSI.vbs脚本将UTF-8(带或不带BOM)转换为ISO-8859-1(基本上与代码页1252相同).它改编自VB6/VbScsript change file / write file with encoding to 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
原答案:以下是我原来的答案,适用于带有BOM的UTF-16,但不适用于UTF-8
如果输出通过管道传输或重定向到文件,则内部命令的输出将自动转换为ANSI.
chcp 1252 type "utf_file.bat" >"ansi_file.bat"
如果使用/ U选项启动CMD,则进程可以反向,但不幸的是,unicode头字节将丢失.但当然这对你的情况来说不是问题.