- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试测试超出 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/
我正在尝试打印出一堆单位标签;其中一些包含希腊字符,一些包含其他有趣的代码点。 我将其追溯到 wctomb 函数,但不知道如何处理,例如UTF-16 字符 8240: char mb[10]; ass
我正在尝试测试超出 BMP 范围的 Unicode。下面我以+UD834DF01作为示例字符,并尝试将其转换为多字节字符,但程序失败并提示“非法字节序列”,为什么? #include #includ
在 XSH 2.9.1 , wctomb 被列为不需要线程安全的函数之一。但是,相反的转换函数 mbtowc 没有出现在列表中。在使用移位状态的编码的实现中,两者都没有线程安全的 API,并且要求一个
我是一名优秀的程序员,十分优秀!