【发布时间】:2016-04-06 06:27:14
【问题描述】:
我只是四处寻找一些 UTF-8 代码点的实现(不,不是抄袭),偶然发现了this:
typedef unsigned char char8_t; typedef std::basic_string<unsigned char> u8string;
这段代码是否忽略了CHAR_BIT 只需要至少为8,但可能更大的事实?或者在这种情况下这无关紧要并且代码很好?如果是这样,那这是为什么呢?
另外,有人(大概是 SO 成员@NicolBolas?)写道:
const char *str = u8"This is a UTF-8 string.";这几乎就是 UTF-8 在 C++ 中用于字符串文字的方式。
我认为 UTF-8 中的代码单元总是正好是八位!
来自 Unicode 标准 8.0.0,第 2.5 章:
在Unicode字符编码模型中,精确定义的编码 表单指定 Unicode 字符的每个整数(代码点)如何 表示为一个或多个代码单元的序列。统一码 标准为 Unicode 提供了三种不同的编码形式 字符,使用 8 位、16 位和 32 位单位。这些是 分别命名为 UTF-8、UTF-16 和 UTF-32。
(删除了换行符,删除了换行符上的连字符,添加了强调。)
那么他为什么声称使用const char* 而不是const uint8_t*(或建议的、假设的const char8_t*)?
【问题讨论】:
-
@skypjack 我回滚到我的版本。第一个代码是一个引用,即使没有真正的文本。
-
一个很好的问题,但引号中几乎没有视觉缺陷,所以我删除了它们,仅此而已。我错了吗,是我的移动应用程序没有正确格式化问题?
-
@skypjack 嗯...看起来并不好,让我们用外交的方式来表达。 :-)
-
@skypjack:您的编辑 (a) 删除了第一个代码块的引用标记,(b) 删除了第二个引用的代码标记,并且 (c) 丢失了已添加的新文本在之前的修订中。在那次编辑中没有任何有用的东西,无论是移动还是其他!
-
该死的,我很抱歉。我刚刚发现:(a)移动应用程序在引用中显示代码时一团糟(我以前从未注意到过)和(b)如果我提交的编辑在与新版本的问题/答案冲突。好吧,让我写下不再编辑问题/答案,除非我是从网络上进行的。对于给您带来的不便,我深表歉意,您回滚它是对的,绝对!!