如何将wchar\u t转换为unicode数字?
如何在unicode表中将wchar值转换为数字 我有一个变量:如何将wchar\u t转换为unicode数字?,c,unicode,C,Unicode,如何在unicode表中将wchar值转换为数字 我有一个变量: wchar_t znak; znak=getwchar(); 我键入“ą”如何将znak转换为#261 我需要unicode表中的数字 ąU+0105带OGONEK的拉丁文小写字母A UTF-16:0x0105 XML:ą 标准没有指定sizeof(wchar\u t)(或其编码),因此您应该说明您使用的是什么系统 假设*nix(Linux、BSD、OSX等) wchar\u t为32位,存储UTF-32码点,这是一种固
wchar_t znak;
znak=getwchar();
我键入“ą”如何将znak转换为#261
我需要unicode表中的数字
ąU+0105带OGONEK的拉丁文小写字母A
UTF-16:0x0105
XML:ą 标准没有指定
sizeof(wchar\u t)
(或其编码),因此您应该说明您使用的是什么系统
假设*nix(Linux、BSD、OSX等)
wchar\u t
为32位,存储UTF-32码点,这是一种固定长度编码。您可以直接使用znak
,无需转换
尽管您应该首先检查UTF-8和char
是否比您的任务更好(对于转换,UTF-32肯定更好,但您的程序可能做得更多)
如果您确定UTF-8对于您的程序来说是一个总体上更好的选择,那么您可以使用从UTF-8代码点中获取一个UTF-32代码点
假设窗口
wchar\u t
为16位,存储UTF-16LE代码单元。对于控制台I/O,您仅限于UCS-2。区别在于UTF-16不是固定长度编码。所谓的代理项对(尽管很少)允许表示非代码点
因此,在您的情况下,直接使用znak
也可以
不过,为了完成,这里有一个可能的实现:
u32从utf16()读取代码点
{
u16代码_单位=getu16();
如果(code\u unit>=0xD800&&code\u unit=0xDC00&&code\u unit\u 2标准没有指定sizeof(wchar\u t)
(或其编码),那么您应该说明您所使用的系统
假设*nix(Linux、BSD、OSX等)
wchar\u t
为32位,存储UTF-32码点,这是一种固定长度编码。您可以直接使用znak
,无需转换
尽管您应该首先检查UTF-8和char
是否比您的任务更好(对于转换,UTF-32肯定更好,但您的程序可能做得更多)
如果您确定UTF-8对于您的程序来说是一个总体上更好的选择,那么您可以使用从UTF-8代码点中获取一个UTF-32代码点
假设窗口
wchar\u t
为16位,存储UTF-16LE代码单元。但对于控制台I/O,您仅限于UCS-2。区别在于UTF-16不是固定长度编码。所谓的代理项对(尽管很少见)允许表示非代码点
因此,在您的情况下,直接使用znak
也可以
不过,为了完成,这里有一个可能的实现:
u32从utf16()读取代码点
{
u16代码_单位=getu16();
如果(code\U unit>=0xD800和code\U unit=0xDC00和code\U unit\U 20x105
(base-16)是261
(base-10)。0x105
(base-16)是261
(base-10)。小调:“0x%04x
而不是”0x%x
。
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;
}