WCF失败:非法字节序列
我正在尝试测试超出BMP范围的Unicode。下面我使用+UD834DF01作为示例字符,并尝试将其转换为多字节字符,但程序失败并显示“非法字节序列”,为什么WCF失败:非法字节序列,c,linux,unicode,locale,glibc,C,Linux,Unicode,Locale,Glibc,我正在尝试测试超出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[]) {
#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;
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,const char*argv[]
{
setlocale(LC_ALL,“”;//我的区域设置是UTF-8
wchar_t wc=0xd834df01;
字符字节[MB_LEN_MAX]={0};
int r=wc(字节,wc);
如果(r>0){
对于(int i=0;i
十六进制D834DF01不是有效的Unicode码点;不存在高于十六进制110000的值。一对(两个“代理”代码单元D834和DF01的序列)是代码点U+10D301的编码,该代码点位于专用区域,不是标准字符,但在UTF-8中可有效编码为f4 8d 8c 81。UTF-16在许多Windows、几乎所有Java和其他一些地方都使用
更正:我在脑子里做了代孕转换,然后滑了一个六角体;正如评论所说,在《太玄经》中它实际上是U+1D301。是说gcc使用wchar____________________________________________0x81@noinput:宽字符/字符串支持主要是您的C库而不是编译器,glibc支持现代Unicode,即UCS-4。关于1D301,您是对的,请参见编辑。