【发布时间】:2012-06-11 21:22:48
【问题描述】:
为什么即使有 UTF-8 字符串文字,C11 或 C++11 中也没有 UTF-8 字符文字?我知道,一般来说,字符文字表示单个 ASCII 字符,它与单个八位字节的 UTF-8 代码点相同,但是 C 和 C++ 都没有说编码必须是 ASCII。
基本上,如果我阅读标准正确,则不能保证'0' 将表示整数0x30,但u8"0" 必须表示字符序列0x30 0x00。
编辑:
我知道并非每个 UTF-8 代码点都适合一个字符。这样的文字只对单八位字节代码点(又名 ASCII)有用,所以我想称它为“ASCII 字符文字”会更合适,所以问题仍然存在。我只是选择用 UTF-8 来构建问题,因为有 UTF-8 字符串文字。我能想象的可移植保证 ASCII 值的唯一方法是为每个字符编写一个常量,考虑到只有 128 个字符,这还不错,但仍然......
【问题讨论】:
-
既然是可变宽度编码,你可以把它存储在什么地方?
-
@JoBates 您应该问另一个问题,询问“我怎样才能获得有保证的 ASCII 字符串?”放弃使用 utf8 到达那里的想法。
-
你可以像这样得到你的 utf-8 字符文字:
char c = u8"A"[0]; -
@DietrichEpp 这是一个常量表达式,因此在 C++11 中,您实际上可以将它用作 switch 语句中的 case (
case u8"A"[0]:)。 -
哦,或者更好:
*u8"A"。这也是一个常量表达式。