出于某些测试目的,我需要一个包含无效 unicode 字符的字符串。如何在 Zsh 中创建这样的字符串?
答案1
我假设您指的是 UTF-8 编码的 Unicode 字符。
这取决于你的意思无效的。
invalid_byte_sequence=$'\x80\x81'
这是一个字节序列,其本身在 UTF-8 编码中无效(UTF-8 编码字符中的第一个字节始终具有两个最高位集)。不过,该序列可以在字符的中间看到,因此一旦连接到另一个无效序列(例如 ),它最终可能会形成一个有效序列$'\xe1'
。$'\xe1'
或者$'\xe1\x80'
它们本身也是无效的,并且可以被视为被截断的字符。
other_invalid_byte_sequence=$'\xc2\xc2'
0xc2 字节将开始一个 2 字节字符,并且 0xc2 不能位于 UTF-8 字符的中间。因此,在有效的 UTF-8 文本中永远找不到该序列。相同的 for$'\xc0'
或$'\xc1'
which 是从未出现在 UTF-8 编码中的字节。
对于\uXXXX
和\UXXXXXXXX
序列,我假设当前区域设置的编码是 UTF-8。
non_character=$'\ufffe'
这是当前指定的 66 个之一非字符。
not_valid_anymore=$'\U110000'
Unicode 现在限制为最大 0x10FFFF 的代码点。 UTF-8 编码最初设计为覆盖 0x7FFFFFFF(perl
还支持达到 0xFFFFFFFFFFFFFFFF 的变体),现在通常也仅限于此。
utf16_surrogate=$'\ud800'
代码点 0xD800 到 0xDFFF 是为 UTF16 编码保留的代码点。所以这些代码点的UTF-8编码是无效的。
现在,在最新版本的 Unicode 中,大多数剩余的代码点仍然没有分配。
unassigned=$'\u378'
较新版本的 Unicode 附带了指定的新字符。例如 Unicode 8.0(2015 年 6 月发布)