繁体   English   中英

Unicode转义序列与十六进制值

[英]Unicode escape sequences vs hexadecimal values

为了在程序中编码Unicode / UTF-8字符,我一直在使用\\uXXXX转义序列,例如:

wchar_t superscript_4 = L'\u2074';  // U+2074 SUPERSCRIPT 4 '⁴'
wchar_t subscript_4   = L'\u2084';  // U+2084 SUBSCRIPT 4 '₄'

但是,使用十六进制应该可以正常工作,因为Unicode是用十六进制编码的。

wchar_t superscript_4 = 0x2074;
wchar_t subscript_4   = 0x2084;

第二个示例是否可以正确编码字符? 我会遇到宽字符问题,分段错误或错误存储的字符值吗? 如果是这样,为什么? 如果没有,为什么?

可以使用十六进制常量初始化它们,但是也可以使用数值常量来初始化普通char ,例如char c = 67; 它的工作方式相同。 它分配具有该int值的任何charwchar_t 在您给出的示例中,并假设一个Unicode执行环境(不能完全保证,但很有可能),它是下标4或下标4。 在我的示例中,它是大写C

特别是 ,对于常规char ,从技术上来说,像'C'这样'C'字符常量的类型为int ,并且通常将int值分配给char 对于wchar_t ,常量实际上确实具有wchar_t类型,并且整数值与调用mbtowc所获得的值相同。 因此,假设您在Unicode环境中工作,则十六进制常量等效于Unicode转义。

但是,通常您不想这样做。 使用字符文字可以使您的意图更加清晰。 如果您在源代码中使用非ASCII字符,则尤其如此,在这种情况下,您可以将代码设置为

wchar_t superscript_4 = L'⁴'
wchar_t subscript_4   = L'₄'

另请注意,出于多种目的,最好使用char16_tchar32_t ,因为wchar_t在不同平台上可以具有不同的宽度; 在您有特殊需要切换到其他内容之前,仅使用UTF-8可能也更清洁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM