了解二进制字符串分隔符

时间:2021-06-20 06:25:05

标签: encoding utf-8 binary blob utf-16

我对编码之间的差异感到困惑

  • \x表示,比如\x68\x65\x6c\x6c\x6f vs.
  • 使用 \u 的,例如 \u0068\u0065\u006c\u006c\u006f

我一直在玩 https://convertcodes.com/unicode-converter-encode-decode-utf/,似乎 UTF-16 使用 \u,UTF-8 使用 \x,但我从其他来源读到 {{ 1}} 并非特定于 UTF-8,而 \x 并非特定于 UTF-16。有什么区别,两种编码都可以使用这两个分隔符吗?此外,这个问题的标题是否正确?这些可以称为二进制分隔符吗?示例字符串(\u\x68\x65\x6c\x6c\x6f)是否被视为二进制字符串、BLOB 或其他内容?这些类型的字符串的正确名称是什么?

1 个答案:

答案 0 :(得分:1)

一切都完全取决于解释它的人,因此意味着最少的上下文:

  • JSON 只知道 \u(未绑定到特定的 UTF 编码)并且总是需要 4 位数字,不知道 \x,并且字符串文字必须包含在 { {1}}。
  • PHP 仅在使用 "double quotation marks"字符串文字。
  • MySQL 不知道这些转义序列,并且字符串文字可以在 \x\u 中。必须单独使用 hexadecimal literals。这与使用的任何编码无关。
  • C++ 知道 "double quotation marks"(期望 2 位数字)、'single quotation marks'(期望 4 位数字)和 "double quotation marks"(期望 8 位数字),它们与 {{3 }} 然后根据编码有不同的结果。字符串字面量始终在 \x 中,单个字符字面量始终在 \u 中。
  • String's literal prefix 知道 \U(需要 2 位数字)和 "double quotation marks"(需要代码点)。不同的 RegEx 风格有不同的支持,有些还接受 4 位数字的 'single quotation marks'。大多数情况下 \x 绑定到输入编码(有时用 \N 修饰符暗示 UTF-8)。

另见:什么是 Perl regular expressions