ja chars在windows批处理文件中

时间:2009-09-28 05:50:35

标签: unicode internationalization batch-file windows-xp

Windows XP .bat文件中日文字符的秘密是什么?

我们有一个脚本,可以在kiosk模式下打开磁盘上的文件:

@ECHO OFF
"%ProgramFiles%\Internet Explorer\iexplore.exe" –K "%CD%\XYZ.htm"

当操作系统是英语时,它工作正常,当XYZ由英文字符组成时,它适用于日语操作系统,但是当XYZ由日文字符组成时,它们会在IE尝试时被篡改为乱码找到文件。

如果批处理文件保存为Unicode或Unicode big endian,则脚本甚至无法运行。

我尝试了各种编码日文字符的方法。 &符号逃脱不起作用(〹)

百分比转义不起作用%xx%xx%xx

ABC工作,AB%43在错误消息中变为AB3,因此看起来%escape正在尝试进行参数替换。这是确认的,因为%043放入了脚本的名称!

有效的做法是将ja字符粘贴到命令提示符中。

@ECHO OFF
CD "%ProgramFiles%\Internet Explorer\"
Set /p URL ="file to open: "
start iexplore.exe –K %URL%

这告诉我iexplore.exe在有ja字符时会正确接受和解析参数,但是当它们写入脚本时不会。

所以很高兴知道通过批处理文件将参数成功导入IE的秘诀是什么,而不是通过剪贴板和环境变量。

任何建议都非常感谢!

最好的问候

理查德柯林斯

P.S。 另一篇帖子提出了这个建议,我还没有跟进:

  

如果在UNICODE模式下打开cmd.exe,可能会有更多运气。使用“cmd / U”。

Batch renaming of files with international chars on Windows XP

我需要知道这是否可以来自剧本内部。

4 个答案:

答案 0 :(得分:4)

为了记录,已经找到了这个问题的简单答案。

如果批处理文件保存为ANSI - 它可以工作!

答案 1 :(得分:3)

首先:批量文件的国际化支持非常有限。没有直接告诉cmd批处理文件所在的代码页的方法。无论如何,UTF-16已经出局了,因为cmd甚至不会解析它。

我在回答以下问题时详细说明了一个选项:

可能对您的需求有所帮助。

原则上,归结为以下几点:

  • 使用具有ASCII
  • 的单字节映射的编码
  • 在批处理文件的开头添加chcp ...
  • 将设置代码页用于文件的其余部分

您可以使用代码页65001,它是UTF-8,但要确保您的文件在开头不包含U + FEFF字符(用作UTF-16和UTF-32中的字节顺序标记,有时使用作为UTF-8文件的标记)。否则,文件中的第一个命令将产生错误消息。

所以请使用以下内容:

echo off
chcp 65001
"%ProgramFiles%\Internet Explorer\iexplore.exe" –K "%CD%\XYZ.htm"

并将其保存为没有BOM的UTF-8(注意:记事本不允许你这样做),它应该可以工作。


cmd /u在这里不会做任何事情,这个建议几乎是虚假的。 /U开关仅指定Unicode将用于重定向输入和输出(和管道)。它与控制台用于输出或读取批处理文件的编码无关。


网址编码也无济于事。 cmd几乎不是Web浏览器,而且在HTTP之外,Web URL编码并不完全普及(因此名称)。 cmd使用百分号表示环境变量和批处理文件和子例程的参数。

“Ampersand escape”也称为HTML和XML中已知的字符实体,也不起作用,因为cmd也不是HTML或XML。 &符号用于在一行中执行多个命令。

答案 2 :(得分:1)

我也在batch/cmd文件中遇到了这个令人沮丧的问题。但是,据我所知,没有人已经说明为什么这个问题发生的原因,这里或其他类似的帖子在StackOverflow。对此最近的陈述是:

“首先:批量文件的国际化支持非常有限。没有直接告诉cmd批处理文件的代码页是什么。“

这是基本问题。 Cmd个文件是Windows-2000+MS-DOS文件的IBM-DOS bat(ch)后继文件。 MSIBM DOS (1984 vintage)写在IBM-PC字符集(code page 437)中。在那里,第8位代码被分配(或“穿上”)字符不同于分配给相应的Windows,ANSI或Unicode代码的字符。 CP437编码的推定是不可更改的(除非,如前所述,通过cmd.exe /u)。如果IBM-PC集的字符在Unicode集中具有完全对应的字符,则Windows资源管理器将它们重新映射到Unicode对应物。唉,即使Windows-1252š¾个字符在代码页437中也没有对应字符。

以下是另一种查看问题的方法。尝试使用batch/cmd程序(Windows Edit.com)打开C:\Windows\system32\Edit.com脚本。 Windows-1252字符0145'(Unicode 8217)显示为IBM-PC 145 æ。将Mary'sFile.txt重命名为Mary’sFile.txt的批处理命令失败,因为它被解释为MaryæsFile.txt

如果复制名为Mary’sFile.txt的文件,则可以避免此问题:引用它为Mary?sFile.txt,例如:

xCopy Mary?sFile.txt Mary?sLastFile.txt

您将在具有Unicode字符的文件的DIR列表中看到类似的处理(替换问号)。

显然,除非现有文件具有Unicode字符,否则这是无用的。该解决方案的范围微不足道,但请尽量使用它。

答案 3 :(得分:0)

您可以尝试使用Shift-JIS编码。