C字符串文字中的UTF-8转义序列

时间:2014-01-15 20:36:53

标签: c unicode utf-8 escaping

在C中,我指定一个形式为:

的Unicode字符
"\uCODEPOINT"

但是,我找不到有关如何存储的任何细节。是UTF-8,16,32吗?有没有指定UTF-8编码的符号,还是我必须用十六进制写每个字节?

2 个答案:

答案 0 :(得分:2)

\ uXXXX是一种(简短形式)通用角色名称。您可以在程序中的任何位置使用\u0041来代替A - 这可以在源文本中,例如,作为标识符的一部分,或者它可以是字符或字符串文字。如果您在文字中使用它,它将与在该文字中使用A完全相同。这同样适用于编码长度超过8位的字符的名称...您可以使用通用名称,或者如果您有一个允许的输入方法,则可以直接输入字符。字符在内存中的编码方式取决于字符是出现在“”还是L“”文字中,取决于字符是否是执行字符集的成员。请注意C标准:

  

每个源字符集成员和转义序列的字符常量和   字符串文字转换为执行字符的相应成员   组;如果没有相应的成员,则转换为实施 -   定义的成员,而不是null(宽)字符。)

在使用UTF-8编码表示非宽字符串的实现中,出现在非宽字符串文字中的\ uXXXX当然会以UTF-8编码,以及文字中的所有其他字符。如果\ uXXXX出现在宽字符串文字中,它将被编码为宽字符,值为0xXXXX。

答案 1 :(得分:1)

  

但是,我找不到有关如何存储的详细信息。

执行字符集取决于实现。但是,如果默认值不是您想要的,某些编译器会有某种options来更改它。 C11标准还有其他方法来指定UTF编码中的Unicode字符串文字(例如u8"Hello")。