Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 为什么在执行批处理文件时,丹麦字符不在文本编辑器中显示?_Batch File_Cmd - Fatal编程技术网

Batch file 为什么在执行批处理文件时,丹麦字符不在文本编辑器中显示?

Batch file 为什么在执行批处理文件时,丹麦字符不在文本编辑器中显示?,batch-file,cmd,Batch File,Cmd,我制作了一个简单的批处理文件,但Windows命令处理器cmd.exe在执行批处理文件时,无法正确显示丹麦字符。它显示像├ª├©├而不是。如果我直接在cmd窗口中键入echoæå,它将显示echoå 我的电脑有问题吗?用于管理您的代码页 如前所述,指定以下内容将有助于您的案例: chcp 1252 在打印echoæå之前使用这行代码 用于管理您的代码页 如前所述,指定以下内容将有助于您的案例: chcp 1252 在打印echoæå之前使用这行代码 计算机上的所有内容都存储在一个包含字符的0

我制作了一个简单的批处理文件,但Windows命令处理器
cmd.exe
在执行批处理文件时,无法正确显示丹麦字符。它显示像
├ª├©├而不是
。如果我直接在cmd窗口中键入
echoæå
,它将显示
echoå

我的电脑有问题吗?

用于管理您的代码页

如前所述,指定以下内容将有助于您的案例:

chcp 1252
在打印
echoæå
之前使用这行代码

用于管理您的代码页

如前所述,指定以下内容将有助于您的案例:

chcp 1252

在打印
echoæå
之前使用这行代码

计算机上的所有内容都存储在一个包含字符的0和1序列中。显示为
æå
的0和1序列取决于规则

第一条规则是,扩展名为batcmd的文件包含由Windows命令解释器解释的文本数据,而扩展名为png的文件包含由图像查看器/编辑器解释的符合png规范的图像数据等

第二条规则是,批处理文件包含的文本数据按每个字符1字节(=8位)编码,而不是按文本编码使用的2字节(主要使用的字符为4字节,很少使用的符号为4字节)或按文本编码使用的1到4字节(自2003年11月起)

每个字符1字节的问题是,只能编码2^8=256个字符,但人类使用的字符要多得多

解决方案是使用一种新的方法。代码页定义了哪个字符,例如用一个带值的字节来表示

  • 十进制:248
  • 十六进制:F8
  • 二进制:1111000
在控制台窗口中执行的命令CHCP(更改代码页),没有任何参数输出用于读取由Windows命令解释器解释为字符的字节的代码页以及如何输出它们

代码页取决于为用于在控制台窗口中运行批处理文件的用户帐户设置的Windows区域和语言设置

console上的默认代码页适用于西欧国家和北欧语言,如丹麦语,冰岛语除外,冰岛语使用

但是,非Unicode编码文本文件的默认代码页在西欧国家(包括丹麦)的GUI应用程序中

如何将行
echoæå
编码到*.bat文件中

  • 使用代码页Windows-1252和每个字符1字节。
    十六进制:
    65 63 68 6F 20 E6 F8 E5
  • 使用代码页OEM 865OEM 850和每个字符1字节。
    十六进制:
    65 63 68 6F 20 91 9B 86
  • 使用不带字节顺序标记(BOM)的UTF-8编码,每个字符有1或2个字节。
    十六进制:
    65 63 68 6F 20 C3 A6 C3 B8 C3 A5
  • 使用带字节顺序标记(BOM)的UTF-16小尾端编码,每个字符有2个字节。
    十六进制:
    FF FE 65 00 63 00 68 00 6F 00 20 00 E6 00 F8 00 E5 00
  • 还有很多其他的
  • ├ª├©├在运行批处理文件时,表示批处理文件是UTF-8编码的,因为那些6OEM 865解释字符具有代码值
    C3 A6 C3 B8 C3 A5

    因此,批处理文件首先需要从使用UTF-8编码的Unicode转换为。虽然Windows-1252不是由定义的标准,但我编写ANSI,因为术语ANSI在Windows上用于每个字符1字节的编码。结果是一个批处理文件,其中包含三个丹麦字符的
    E6 F8 E5

    Windows-1252编码的批处理文件在执行时显示

    因此,批处理文件需要第二次从ANSI转换为OEM,即从Windows-1252转换为OEM 865或OEM 850。这三个丹麦字符现在用
    91 9B 86
    编码在文本文件中,但在图形用户界面应用程序(GUI文本编辑器)中使用代码页Windows-1252显示为
    ”›†

    但是,由于Windows区域和语言设置中配置了德语,现在批处理文件在执行时使用console的代码页850打印到我的计算机上的console窗口中

    另一种解决方案是在Windows-1252中对批处理文件进行编码,并在批处理文件中使用以下命令行,然后使用ECHO输出文本:

    chcp 1252 >nul
    

    但是,如果在控制台窗口的属性中选择了不支持windows-1252的字体,则此解决方案不起作用。例如,如果在控制台窗口的“属性”窗口的“字体”选项卡上选择了“光栅字体”,并且选择了Windows(7、Vista、XP)作为用于控制台的光栅字体,将代码页更改为1252无效,因为字体显示在Windows-1252 encoded
    echoæå
    上仍然
    µ°Õ
    ,尽管活动代码页为1252。换句话说,为控制台窗口选择的字体还必须支持活动代码页,以正确显示输出文本。

    计算机上的所有内容都以零和一(包括字符)序列存储。显示为
    æå
    的0和1序列取决于规则

    第一条规则是,扩展名为batcmd的文件包含由Windows命令解释器解释的文本数据,而扩展名为png的文件包含由图像查看器/编辑器解释的符合png规范的图像数据等

    第二条规则是批处理文件