我正在运行一台 Ubuntu 机器并通过 RDP 连接到 Windows 10 服务器。服务器上有一个 .txt 文件,在 Windows 的文本编辑器中打开时显示如下:
当我打开终端时,type
文件看起来像这样:
当我从虚拟机内部通过电子邮件将文件发送给我自己,并在 Ubuntu 的文本编辑器中打开它时,它看起来像这样:
当我cat
在 Ubuntu 机器上看到这个文件时,它看起来像这样:
这是啥角色?
我之所以问这个问题,是因为在虚拟机中,我将这行粘贴到 Telnet TCP 套接字连接中,而该连接的另一端似乎将其识别为某种终止字符。但是,当我从 Ubuntu 主机执行相同操作时,Telnet 服务器似乎不再以相同的方式运行,这让我认为这是 Windows 特有的一些字符,而 Linux 要么发送了错误的字符,要么根本没有发送字符?
答案1
找出答案的最可靠方法是将文件加载到十六进制编辑器(二进制编辑器)中,或者使用hd
或hexdump -C
或之类的工具xxd
来查看这些字符的字节值。
虽然您的屏幕截图显示基于 GTK 的文本编辑器告诉您字符是 U+0002 和 U+0003 - 这些是编辑器处理的“解码”Unicode 代码点,而不是文件中的“原始”字节,但您仍然可以在 codepoints.net 等网站上查找它们,该网站显示:
代码点编号 | Unicode 名称 | UTF-8 字节表示 |
---|---|---|
U+0002 | 正文开头 | 0x02 |
U+0003 | 正文结束 | 0x03 |
所有 U+007F 以下的 Unicode 代码点都与 ASCII 表中的位置 1:1 对应,并且它们的 UTF-8 表示形式也与 ASCII 中的表示形式相同。
所以他们“不是”C0控制代码范围 – 它们没有标准的视觉表示,因为它们的目的是在机器可读文件中充当分隔符,而不是在人类可读文本中充当分隔符。有些程序可能会将它们显示为“STX”和“ETX”(根据它们的 ASCII 名称)或“^B”和“^C”(因为它们也对应于终端中的 Ctrl 键);有些程序可能根本不显示它们。
Windows 控制台源自 MS-DOS,它以在IBM PC 代码页– 当字节 0x02 和 0x03 直接放入视频 RAM 时,PC 将显示☻
相应♥
的内容。