【发布时间】:2018-01-22 19:17:01
【问题描述】:
为了在我的程序中编码 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_MAX 的字符文字。这本身就很糟糕......
-
你试过
L'\u2074'而不是'\u2074'吗? -
@rubenvb 哎呀,打错了。已修复(根据 Keine 的评论)。
-
@PeterJ 多字符字符由实现定义和字节序相关
-
@KeineLust 它们可能依赖于字节序,但它们是实现定义的,并且实现可以将它们定义为使用特定的字节序,独立于执行中使用的任何内容。
标签: c unicode utf-8 hex widechar