【发布时间】:2026-02-05 04:50:02
【问题描述】:
我有以下一段代码,代码中的注释说它将任何大于7F 的字符转换为 UTF-8。我对此代码有以下疑问:
if((const unsigned char)c > 0x7F)
{
Buffer[0] = 0xC0 | ((unsigned char)c >> 6);
Buffer[1] = 0x80 | ((unsigned char)c & 0x3F);
return Buffer;
}
- 这段代码是如何工作的?
- 我当前使用的windows代码页对
Buffer中的字符有影响吗?
【问题讨论】:
-
1.它...按照 UTF-8 编码的定义工作?不然怎么办?
-
@R.MartinhoFernandes:我猜是这样..这段代码不是我写的。它已经工作了一段时间了。所以我猜它是正确的。我想了解它背后的逻辑。
-
@Asha 我想你需要深入研究 utf-8 规范。
-
@Asha 没什么好理解的,假设您知道
|和>>运算符的作用(如果不知道,应该很容易在一些 C++ 学习材料中找到)。 UTF-8 规范说明了每个位需要放在哪里,并且该代码只是将所有位放在它们需要的位置。 -
@R.MartinhoFernandes 除非它没有。该代码假设单字节编码是 Latin-1,它已在很大程度上被 Latin-15 取代。 (我也很好奇
Buffer,以及他返回指向它的指针的事实,以及它不是'\0'终止的事实。我会非常怀疑这段代码。)
标签: c++ c utf-8 character-encoding mbcs