批處理文件通常是在北美和使用像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等。非十六進制顯然不被解釋。我不知道這種特定的編碼,但它可能會給你一個提示。 –