gpt4 book ai didi

c - wctomb 失败 : Illegal byte sequence

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:18 24 4
gpt4 key购买 nike

我正在尝试测试超出 BMP 范围的 Unicode。下面我以+UD834DF01作为示例字符,并尝试将其转换为多字节字符,但程序失败并提示“非法字节序列”,为什么?

#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <stdlib.h>
#include <limits.h>

int main(int argc, const char *argv[])
{
setlocale(LC_ALL, ""); // my locale is UTF-8

wchar_t wc = 0xd834df01;
char bytes[MB_LEN_MAX] = {0};
int r = wctomb(bytes, wc);
if (r > 0) {
for (int i = 0; i < MB_LEN_MAX; i++)
printf("0x%x\n", bytes[i]);
} else {
perror("fail");
}

return 0;
}

最佳答案

十六进制 D834DF01 不是有效的 Unicode 代码点;没有高于十六进制 110000 的值。 (两个的序列)“代理”代码单元 D834 和 DF01 是 UTF-16代码点 U+10D301 的编码,它位于私有(private)区域而不是标准字符,但可以在 UTF-8 中有效编码为 f4 8d 8c 81。UTF-16 用于大部分 Windows,几乎所有 Java,以及其他一些地方。

更正:我在脑海中进行了代理转换并滑倒了一个十六进制;正如所评论的那样,它实际上是 U+1D301 digram for heavenly earth在太玄经中。

关于c - wctomb 失败 : Illegal byte sequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44192112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com