批处理文件通常是在北美和使用像code page 850(OEM多语言拉丁语I)或code page 437(OEM美国)的OEM代码页西欧国家“ASCII”文件,而不是代码页Windows-1252如通常用于编码的单字节使用文本文件。用于批处理文件的代码页取决于控制台中非Unicode文件的本地设置。代码页并不重要,只要代码值小于128的字符在批处理文件中使用,即批处理文件是真实的ASCII文件。
因此,请确保您使用正确的代码页编辑并保存批处理文件为ASCII文件,而不是使用UTF-8,UTF-16 Little Endian或UTF-16 Big Endian作为Unicode文件。 Visual Studio的编辑器默认使用文件的UTF-8编码。这是批处理文件的错误编码。
字符«
在代码页850中的代码值174十进制(是0xAB)的表。在代码页1252码值174的表是性格®这是要输出为UTF-8或Windows-1252(也可用于字符®码值174)编码的批处理文件的字符的指示。
存储为ANSI文件,代码页的Windows 1252的示范一个简单的批处理代码。
@echo off
cls
echo This batch file was saved as ANSI file using code page Windows-1252.
echo.
echo Registered trademark symbol ® has code value 174 in Windows-1252.
echo.
echo But active code page is not Windows 1252 in console window.
echo.
chcp
echo.
echo Therefore the left guillemet character is output instead of registered
echo trademark symbol as this character has in code page 850 code value 174.
echo.
echo Press any key to continue ...
pause>nul
和批处理文件是DOS/Windows的,因此应使用回车+换行符作为行终止,而不是只换行(UNIX)或只是回车(旧MAC)。
某些文本编辑器显示分别线路终端器类型和编码代码页某处状态栏在主应用程序窗口的底部,用于活动文件。
我无法重现该问题。批处理脚本在我的机器上按预期工作。 –
还有一件事。在输出中打印的非ASCII字符看起来是%HH的十六进制表示,其中HH是来自标识符的两个十六进制数字。例如。 '«'= 0xAB,'»'= 0xBB等。非十六进制显然不被解释。我不知道这种特定的编码,但它可能会给你一个提示。 –