字符“ä”在批处理文件的输入参数中读作“õ”

时间:2015-10-12 08:26:48

标签: batch-file encoding cmd

我的程序有一个输入参数来识别它应该运行的功能。我现在正在准备一些 .bat 文件,我的程序可以采用的输入参数之一称为“hänvisnigskälla”(参考源的瑞典语)。

该程序在我自己的计算机上运行正常但是当我将它移动到生产服务器时,我发现程序无法识别函数名称并将其读作“hõnvisnigskõlla”。因此,ä字符被误读为õ

我想知道发生这种情况的原因以及服务器计算机上是否有办法修复它。否则我应该改变我的计划。

2 个答案:

答案 0 :(得分:2)

这是因为控制台的代码页与系统的其他部分不同。您的Windows UI可能使用代码页1252作为其默认的遗留代码页(其中Unicode不适用)。保存文件并选择“ANSI”作为编码时,这也适用于记事本。

另一方面,控制台可能使用代码页850或437,其中»ä«位于代码页1252中。»/ p>

所以要么在记事本中使用»“«,在CP850中与»ä«相同,或者使用不同的编辑器,它允许您以OEM编码保存文件,或使用不同的音译,即使这在技术上并不正确。

另一种选择是使用chcp将控制台的代码页更改为1252,这是您在批处理文件中执行的第一项操作。那么输出也是正确的。但这会更改控制台的代码页 - 即使在批处理文件结束后仍然存在更改(如果您在交互式控制台会话中调用它,至少)。所以我通常会尽量避免这种情况。

答案 1 :(得分:1)

除了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

a complete Code Page Identifiers

有关该错误的进一步阅读http://blogs.msdn.com/b/oldnewthing/archive/2005/03/08/389527.aspx