如何将wchar_t转换为unicode号?

Tu *_* .. 1 c unicode

如何在unicode表中将wchar值转换为数字?

我有一个变量:

wchar_t znak;
znak=getwchar();
Run Code Online (Sandbox Code Playgroud)

我输入'±'如何将znak转换为#261我需要在unicode表中编号.

±U + 0105带有OGONEK的拉丁文小写字母A.

UTF-16:0x0105

XML:ą

a3f*_*a3f 5

标准没有指定sizeof(wchar_t)(或其编码),所以你应该说明你所使用的系统.

假设*nix(Linux,BSD,OSX等)

wchar_t是32位并存储UTF-32码点,这是一个固定长度的编码.您可以znak直接使用,无需转换.

虽然你应该首先检查是否UTF-8并且char不能更好地完成你的任务(对于转换,UTF-32肯定更好,但你的程序可能会做得更多).

如果您确定UTF-8是您的程序的总体更好的选择,您可以使用mbstowcs从UTF-8代码点获取UTF-32代码点.

假设Windows

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)其纳入所需的基础.