在批处理文件中使用盒形绘图Unicode字符

4

我正在制作一个批处理文件,使用这些字符:

˧ ˥ ˪ ˫

它不能工作,它只是自行终止。 我见过人们使用像这样的字符:

Å

它并不是字符本身,而是转化为字符的能力。有人能否给我提供这些字符的列表,显示上面的字母类型以及它们所转化成的字符?


当您从控制台运行 chcp 时,会得到什么结果? - Richard
3个回答

22

如果你想编写使用这些字符的控制台批处理文件,那么你需要使用一个能够使用控制台代码页保存批处理文件的编辑器。要检查它是什么,请输入:

如果你想编写使用这些字符的控制台批处理文件,那么你需要使用一个能够使用控制台代码页保存批处理文件的编辑器。要检查它是什么,请输入:

C:\>chcp
Active code page: 437

这是我美国Windows系统的结果。西欧版Windows通常会使用850代码页。

一个好的编辑器是Notepad++。在编辑器中设置该编码(编码,字符集,西欧,OEM-US),然后将以下字符复制到其中:

@echo off
echo ╔═╦═╗ ┌─┬─┐ ╓─╥─╖ ╒═╤═╕
echo ║ ║ ║ │ │ │ ║ ║ ║ │ │ │
echo ╠═╬═╣ ├─┼─┤ ╟─╫─╢ ╞═╪═╡
echo ║ ║ ║ │ │ │ ║ ║ ║ │ │ │
echo ╚═╩═╝ └─┴─┘ ╙─╨─╜ ╘═╧═╛

将文件保存为test.bat,并从控制台运行:

C:\>test
╔═╦═╗ ┌─┬─┐ ╓─╥─╖ ╒═╤═╕
║ ║ ║ │ │ │ ║ ║ ║ │ │ │
╠═╬═╣ ├─┼─┤ ╟─╫─╢ ╞═╪═╡
║ ║ ║ │ │ │ ║ ║ ║ │ │ │
╚═╩═╝ └─┴─┘ ╙─╨─╜ ╘═╧═╛

当您再次在Notepad++中打开该文件时,可能会看到类似以下内容:

@echo off
echo ÉÍËÍ» ÚÄÂÄ¿ ÖÄÒÄ· ÕÍÑ͸
echo º º º ³ ³ ³ º º º ³ ³ ³
echo ÌÍÎ͹ ÃÄÅÄ´ ÇÄ×Ķ ÆÍØ͵
echo º º º ³ ³ ³ º º º ³ ³ ³
echo ÈÍÊͼ ÀÄÁÄÙ ÓÄÐĽ ÔÍÏ;

由于文件中没有指示字符表示的代码页,Notepad ++ 可能会选择所谓的ANSI代码页。在美国 Windows 上,它是Windows-1252。只需再次选择OEM-US编码即可正确显示。


Mark,我只是想说一声大谢谢。Notepad++的技巧非常有效地解决了我们在一个大型Xcopy批处理文件中遇到的问题,该文件名中包含了许多挪威字符。在这些文件上,bat会显示“找不到文件”,但单独执行一个cmd命令行却可以正常工作。按照你所说的方法,我成功地运行了整个批处理文件,效果非常好...再次感谢! - TheCleaner
在我的系统上,“ÉÍËÍ» ÚÄÂÄ¿ ÖÄÒÄ· ÕÍÑÍ”问题没有发生,但是当我切换到“chcp 437”时,我的控制台变得更加平坦和矮小。 - user6250760
将这段文本与 chcp 437 放入我的批处理文件中可以解决问题,但这会破坏所有的 findstr 和 call 命令。 - Mark Deven

3
您可使用的字符取决于所设置的控制台代码页。您可以通过chcp命令查看它。在许多系统中,它是850或437。然后,您可以在代码页中查找字符,或找到一个支持所需字符的代码页,并在批处理文件中早期使用chcp命令进行设置。
请注意,这是进程的设置,因此如果有人需要在控制台窗口之后继续工作,将其更改为另一种颜色可能不太友好。另外,代码页65001是UTF-8,但存在一系列问题和缺点,使其使用起来相当棘手。
请注意,记事本不是用于编写需要超出ASCII的批处理文件的有用文本编辑器,因为Windows非控制台部分的遗留编码是另一种编码方式。这可能就是您所说的Å变成另一个字符的原因。

1
值得注意的是,批处理脚本必须使用ANSI编码。不支持Unicode。 - dbenham
谢谢,但是字符变得很奇怪。原来是特殊字符将其转换为Unicode字符。你能否给我发送一个将其转换为Unicode字符的字符列表? - user4368504
@JacobRocks12,说实话这没什么意义。没有字符会变成Unicode字符,除了它们本身。此外,“奇怪”并不是一个非常有用的问题描述。 - Joey
字符列表看起来像@MarkTolonen在下面说的: @echo off echo ÉÍËÍ» ÚÄÂÄ¿ ÖÄÒÄ· ÕÍÑ͸ echo º º º ³ ³ ³ º º º ³ ³ ³ echo ÌÍÎ͹ ÃÄÅÄ´ ÇÄ×Ķ ÆÍØ͵ echo º º º ³ ³ ³ º º º ³ ³ ³ echo ÈÍÊͼ ÀÄÁÄÙ ÓÄÐĽ ÔÍÏ; 您能否把它们的清单发给我? - user4368504
你应该意识到这些只是在另一个代码页中的相同字节吗?你可以查找各自代码页的字符映射并制作表格。或者编写一个快速脚本,将每个字节转换为两个代码页。解决方案不是尝试学习字符之间的某些神秘联系,而是使用文本编辑器,允许您指定您想要的文本文件的编码(正如我和马克都指出的那样)。 - Joey
@JacobRocks12:你可以使用这个小的PowerShell片段来获取清单:$e=[Text.Encoding];$d=$e::Default;$o=$e::GetEncoding(+((chcp)-replace'.*?(?=\d+$)'));128..255|%{$d.GetString($_)+"="+$o.GetString($_)} - Joey

1
你只需要这个等效文件,它可以在任何文本编辑器中使用,包括标准的Windows记事本:
Notepad: ┌┬┐ ├┼┤ └┴┘ ─ │
cmd.exe: Ú¿ ÃÅ´ ÀÁÙ Ä ³

Notepad: ╔╦╗ ╠╬╣ ╚╩╝ ═ ║
cmd.exe: ÉË» Ìι Èʼ Í º

将此表格复制到文本文件中,保存为Unicode编码。然后,当您想在批处理文件中插入字符时,只需选择所需图形字符下方的字符。
注意:这些字符适用于代码页850或437。
此表格是从this answer复制的。

处理包含超出255代码页范围的Unicode字符的文件名怎么办? - Nyerguds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接