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表单上失败.
您已声明您不想依赖脚本主机,但没有可以执行您想要的本机批处理命令.您将不得不使用纯批次之外的东西.脚本主机是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.Web.Http.HttpClient.GetStringAsync 总
- windows – 笔记本电脑从睡眠中醒来
- Win10系统安装UEFI+GPT配置
- Windows 2008 Server SP2 64位 – 在TIME_WAIT之
- windows-phone-7 – 绑定带有RichTextBox链接的文
- WIN10安装office2003/7失败 WIN10安装office2003
- windows – 为通过USB连接的某些硬件编写游戏控制
- windows-server-2008 – 什么是Windows等同于Pup
- windows – 像Spy这样的软件如何获取信息?