有没有办法将空字节(ASCII 0x00)复制到 Windows 上的剪贴板?

sen*_*hin 16 windows clipboard copy-paste

空字节 (ASCII 0x00) 在 Windows 上似乎不可复制(Ctrl+C-able)。要对此进行演示,请打开浏览器的开发控制台并执行console.log('a\x00b'). 如果您尝试将结果字符串复制粘贴到 Windows 8 机器(也可能是其他版本的 Windows)上,您会发现只有a被复制的字符串。在\x00后,一切都将被忽略。

有没有办法复制包含空字节的整个字符串?剪贴板甚至可以保存空字节吗?

(辅助问题:为什么不能复制空字节?例如,是否存在与安全相关的原因,或者只是 Windows 愚蠢?)

Ben*_*n N 12

不,您不能在剪贴板上放置带有嵌入空字符的文本。让我们看看标准的 Windows 剪贴板格式列表。有几种格式可以保存通常理解为文本的内容:

  • CF_TEXT (1)
  • CF_OEMTEXT (7)
  • CF_UNICODETEXT (13)

每一个在其定义中都有这句话:

空字符表示数据结束。

现在,CF_UNICODETEXT 将其数据保留为 UTF-16LE,因此它很可能会有一些空字节,但空字符(基本上是连续两个空字节)仍将结束字符串。

我们只能推测为什么剪贴板文本中不允许使用空字符,但很可能只是因为 Windows 中最常用的字符串处理函数假设空字符表示结束。知道字符串在哪里停止的唯一其他方法是为其长度添加前缀。

您可以将图形保存在剪贴板上,即使它们可能具有空字节,因为它们以不同的剪贴板格式(例如CF_BITMAP)传递,程序必须以不同的方式理解这些格式。


归档时间:

查看次数:

16503 次

最近记录:

9 年,4 月 前