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
我需要知道这是否可以来自剧本内部。
答案 0 :(得分:4)
为了记录,已经找到了这个问题的简单答案。
如果批处理文件保存为ANSI - 它可以工作!
答案 1 :(得分:3)
首先:批量文件的国际化支持非常有限。没有直接告诉cmd
批处理文件所在的代码页的方法。无论如何,UTF-16已经出局了,因为cmd
甚至不会解析它。
我在回答以下问题时详细说明了一个选项:
可能对您的需求有所帮助。
原则上,归结为以下几点:
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)
后继文件。 MS
和IBM 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编码。