源代码定义宽字符字符串和跨平台
Source code defined wide char strings and cross-platform
在 Visual Studio 下,源代码定义的字符串,如 L"abc"
会生成具有 2 个字节宽字符的 C 字符串。
- Linux 编译器呢?是否也可以使用 L"" 语法?
- 如果是,C 字符串的字符是否 linux 宽字符(即 4 字节宽)?
- 是否有 "cross-compiler" 方法来定义 UCS-2 或 UTF-16 编码的 unicode 字符串?
谢谢。 :)
编辑:忘了说我不能使用 C++11。
如果不至少使用 C11 或 C++11(您可以在其中使用 u"..."
),就无法方便地编写 UTF-16 字符串文字。
宽字符串语法 (L"..."
) 使用实现定义的编码创建 const wchar_t*
。在Windows上,这个编码是UTF-16;使用 GCC(使用 GNU 的 libc),此编码为 UTF-32。
创建 UTF-16 或任何 UTF 字符串 (pre-C11/C++11) 的唯一安全且可移植的方法是将它们写入整数数组。例如:
const uint16_t str[] = { 0x24EA, 0x0 };
在 Visual Studio 下,源代码定义的字符串,如 L"abc"
会生成具有 2 个字节宽字符的 C 字符串。
- Linux 编译器呢?是否也可以使用 L"" 语法?
- 如果是,C 字符串的字符是否 linux 宽字符(即 4 字节宽)?
- 是否有 "cross-compiler" 方法来定义 UCS-2 或 UTF-16 编码的 unicode 字符串?
谢谢。 :)
编辑:忘了说我不能使用 C++11。
如果不至少使用 C11 或 C++11(您可以在其中使用 u"..."
),就无法方便地编写 UTF-16 字符串文字。
宽字符串语法 (L"..."
) 使用实现定义的编码创建 const wchar_t*
。在Windows上,这个编码是UTF-16;使用 GCC(使用 GNU 的 libc),此编码为 UTF-32。
创建 UTF-16 或任何 UTF 字符串 (pre-C11/C++11) 的唯一安全且可移植的方法是将它们写入整数数组。例如:
const uint16_t str[] = { 0x24EA, 0x0 };