我的程序有一个输入参数来识别它应该运行哪个函数。我现在正在准备一些.bat文件,我的程序可以接受的输入参数之一被称为"hänvisnigskälla"(瑞典语为参考源)。
程序在我自己的计算机上运行良好,但是当我将其移动到生产服务器时,我看到程序不识别函数名并将其读取为"hõnvisnigskõlla"。因此,ä
字符在某处被误读为õ
。
我想知道发生这种情况的原因,以及是否有办法在服务器计算机上修复它。
这是因为控制台的代码页与系统的其他部分不同。您的Windows UI可能使用代码页1252作为其默认的遗留代码页(其中Unicode不适用)。当保存文件并选择"ANSI"作为编码时,这也适用于记事本。
另一方面,控制台可能使用代码页850或437,其中在代码页1252中"ä"所在的地方有"õ"。
因此,要么在记事本中使用»"«(在CP850中与»ä«位于同一位置),要么使用不同的编辑器,允许您以OEM编码保存文件,或者使用不同的音译,即使它在技术上不正确。
另一个选择是使用chcp
将控制台的代码页更改为1252,作为您在批处理文件中做的第一件事。然后输出也将是正确的。但是这会更改控制台的代码页—即使在批处理文件结束之后(至少如果在交互式控制台会话中调用它),这个更改也会持续存在。所以我通常会尽量避免这个
除了joey的答案,您还可以在更改之前备份chcp
@echo off
rem backup the current chcp
for /f "tokens=2 delims=:." %%x in ('chcp') do set cp=%%x
rem set your own
chcp 865>nul
:: your stuff here ::
rem restore chcp
chcp %cp%>nul
Code page: Country/region or language
437 : United States
850 : Multilingual (Latin I)
852 : Slavic (Latin II)
855 : Cyrillic (Russian)
857 : Turkish
860 : Portuguese
861 : Icelandic
863 : Canadian-French
865 : Nordic
866 : Russian
869 : Modern Greek
完整的代码页标识符
进一步了解这个bug http://blogs.msdn.com/b/oldnewthing/archive/2005/03/08/389527.aspx