windows – 如何将存储在utf-8中的批处理文件转换为通过另一个批处理文件工作并运行它的程序

我有一个程序用于创建批处理文件.我的问题是程序的输出是UTF-8,所以只要é,à,ö,Ä等任何变音标记在我的批处理文件中就会失败.
在创建批处理文件的程序中,我似乎无法找到将输出转换为除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转换为另一个代码页,所以即使那个似乎对我有用……

您已声明您不想依赖脚本主机,但没有可以执行您想要的本机批处理命令.您将不得不使用纯批次之外的东西.脚本主机是Windows的原生主机,所以我认为这不是问题.

以下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头字节将丢失.但当然这对你的情况来说不是问题.

相关文章

Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...
Windows文件操作基础代码 Windows下对文件进行操作使用的一段...
Winpcap基础代码 使用Winpcap进行网络数据的截获和发送都需要...
使用vbs脚本进行批量编码转换 最近需要使用SourceInsight查看...