如何在unicode表中将wchar值转换为数字?
我有一个变量:
wchar_t znak;
znak=getwchar();
Run Code Online (Sandbox Code Playgroud)
我输入'±'如何将znak转换为#261我需要在unicode表中编号.
±U + 0105带有OGONEK的拉丁文小写字母A.
UTF-16:0x0105
XML:ą
标准没有指定sizeof(wchar_t)(或其编码),所以你应该说明你所使用的系统.
wchar_t是32位并存储UTF-32码点,这是一个固定长度的编码.您可以znak直接使用,无需转换.
虽然你应该首先检查是否UTF-8并且char不能更好地完成你的任务(对于转换,UTF-32肯定更好,但你的程序可能会做得更多).
如果您确定UTF-8是您的程序的总体更好的选择,您可以使用mbstowcs从UTF-8代码点获取UTF-32代码点.
wchar_t是16位并存储UTF-16LE代码单元.对于控制台I/O,您仅限于UCS-2.不同之处在于UTF-16不是固定长度编码.所谓的代理对(尽管很少见)允许表示非BMP代码点.
所以在你的情况下,直接使用znak也会起作用.
但是,为了完成起见,这是UTF-16维基百科文章的可能实现:
u32 read_code_point_from_utf16()
{
u16 code_unit = getu16();
if (code_unit >= 0xD800 && code_unit <= 0xDBFF) {
u16 code_unit_2 = getu16();
if (code_unit_2 >= 0xDC00 && code_unit_2 <= 0xDFFF)
return (code_unit << 10) + code_unit_2 - 0x35FDC00;
push_back(code_unit_2);
}
return code_unit;
}
Run Code Online (Sandbox Code Playgroud)
最后,使用sprintf(s, "&#%d;", znak)并将sprintf(s, "0x%x", znak)其纳入所需的基础.