我对编码之间的区别感到困惑
- 用
x
表示,如x68x65x6cx6cx6f
vs. - 使用
u
的,如u0068u0065u006cu006cu006f
。
我一直在玩 https://convertcodes.com/unicode-converter-encode-decode-utf/,似乎 UTF-16 使用u
和 UTF-8 使用x
,但从其他来源我读到x
不是特定于 UTF-8 的,u
也不是特定于 UTF-16。有什么区别,两种编码都可以同时使用这两个分隔符吗?此外,这个问题的标题是否正确?这些可以称为二进制分隔符吗?示例字符串(x68x65x6cx6cx6f
和u0068u0065u006cu006cu006f
)是否被视为二进制字符串,BLOB或其他东西?这些类型的字符串的正确名称是什么?
一切都完全取决于谁来解释它,因此意味着最少的上下文:
- JSON 只知道
u
(不绑定到特定的 UTF 编码),并且总是需要 4 位数字,不知道x
,字符串文字必须括在"double quotation marks"
中。 - PHP 只知道
x
(需要 1 或 2 位数字)和u
(需要任意数量的数字,绑定到 UTF-8 编码)只有在对字符串文字使用"double quotation marks"
时。 - MySQL不知道这些转义序列,字符串文字可以在
'single quotation marks'
或"double quotation marks"
中。必须单独使用十六进制文本。这未绑定到使用的任何编码。 - C++知道
x
(期望 2 位数字)、u
(期望 4 位数字)和U
(期望 8 位数字),它们与字符串的文字前缀相结合,然后根据编码产生不同的结果。字符串文字总是在"double quotation marks"
,单字符文字总是在'single quotation marks'
。 - Perl 正则表达式知道
x
(期望 2 位数字)和N
(期望代码点)。不同的正则表达式风格有不同的支持,有些还接受 4 位数字的x
。大多数情况下,x
绑定到输入编码(有时使用 UTF-8 的u
修饰符暗示)。
另请参阅:什么是字符串文本。