代码之家  ›  专栏  ›  技术社区  ›  Mohan

C++:Unicode字符串文字的可移植性

  •  -2
  • Mohan  · 技术社区  · 7 年前

    在调试gcc时,我发现Unicode文本 u"万不得已" 代表为 u"\007\116\015\116\227\137\362\135" . 这是有道理的-- 万

    现在,在Intel驱动的Macbook上的Apple LLVM9.1.0上,我发现同一个文本不能作为同一个字符串处理,即:

    u16string{u"万不得已"} == u16string{u"\007\116\015\116\227\137\362\135"}
    

    true false . 我还在一个小的末日系统,所以我不明白发生了什么。

    注意。我不是想用这些信件 == u“\007-116-015-116-227-137-362-135” . 我只想知道发生了什么。

    1 回复  |  直到 7 年前
        1
  •  7
  •   Remy Lebeau    7 年前

    我发现Unicode文本 u"万不得已" 代表为 u"\007\116\015\116\227\137\362\135"

    u"..." 字符串文字编码为 char16_t -基于所有平台上的UTF-16编码字符串(即 u

    由这个UTF-16编码单元序列表示:

    4E07 4E0D 5F97 5DF2
    

    在一个小的endian系统上,UTF-16序列由这个原始字节序列表示:

    07 4E 0D 4E 97 5F F2 5D
    

    "\007\116\015\116\227\137\362\135" 仅当使用 char 字符串(注意缺少字符串前缀,或者 u8 也适用于本例)。

    u“\007-116-015-116-227-137-362-135” 烧焦 -基弦!它是一个 -基于

    0007 004E 000D 004E 0097 005F 00F2 005D
    

    所以你俩 u16string

    你可以在这里看到这一点: Live Demo