批处理文件中的ANSI / Unicode冲突

时间:2014-11-29 17:44:31

标签: windows batch-file unicode character-encoding ansi

我有一些批处理文件使用文本文件进行语言独立。直到昨天一切都很好......但后来我开始将标准文本翻译成荷兰语和德语。两种语言都使用所谓的变音或重音字符,如ä,ë,ö。我认为西班牙语会给ñ带来同样的问题。我使用标准编码使用记事本创建了文本文件,即ANSI。只需键入(DOS:TYPE)文件就会显示错误的重音字符:例如ë显示为Ù。编辑完文本文件并使用Unicode编码保存后,DOS TYPE显示我在记事本中输入的内容。在这一点上,我认为我的问题已经解决了...但我的批处理代码现在显示我没有任何文字!所有文本都通过批处理文件从文件中检索,该文件看起来像这样(简化):

@rem Parms %1 text type number             File %%a program name
@rem       %2 program name (double quoted)      %%b  - - filler (tabs)
@rem       %3 text number                       %%c text number
@rem       %4 replacement value - 1             %%d  - - filler (tabs)
@rem       %5 replacement value - 2             %%e text string
set TempText=
set TempType=
setlocal enabledelayedexpansion
@rem Read file until both values are set ...
for /f  "usebackq tokens=1,2,3,4,5 delims=|" %%a in ("%EnvPath%Text.txt") do (
    if /i   %%a==Tools (if /i %%c==%1 (set  TempType=%%e))
    if /i   %%a==%~2   (if /i %%c==%3 (set  TempText=%%e))
    if not  "!TempType!"=="" (if not "!TempText!"=="" (goto :Leave))
)
:Leave
endlocal & set TempText=%TempText%&set TempType=%TempType%

ECHOON时,它表明没有从文件中读取任何行,或者永远不会执行FOR循环。

我的问题是:如何让FOR循环读取Unicode文本?

2 个答案:

答案 0 :(得分:1)

你的问题是cmd使用代码页850(在美国可能是437),输入chcp来查看。英语Windows在其他地方使用1252。

GUI程序

ñ 0xf1

控制台程序

ñ 0xa4

如果您使用32位,请使用edit.exe(msdos文本编辑器)。否则,您可以使用Word并另存为MSDos文本。

答案 1 :(得分:0)

晚了三年,但是......

您可以使用type命令将文件“动态”转换为ANSI:

...  %%a in ('type "%EnvPath%Text.txt"') do (