c++ 编译器如何从 utf8 源文件生成 unicode 字符串文字

Posted

技术标签:

【中文标题】c++ 编译器如何从 utf8 源文件生成 unicode 字符串文字【英文标题】:how can c++ compiler generate unicode string literals from a utf8 source file 【发布时间】:2016-11-21 20:09:53 【问题描述】:

我正在使用 gcc 用 c++ 编写程序。我有一个 utf8 编码的源文件,我希望源文件中的字符串文字为 UTF-16 字符串。我使用 gcc 选项 -municode,它定义了 UNICODE 宏。字符串文字仍以 const char * 的形式实现。当我使用 TEXT("hello world") 时,它仍然是一个 const char *

另外,我想知道要定义哪个宏或使用哪个命令行选项,以便在 std::string 对象和 std 库的所有模板实例中具有 16 位特征(我想要 std::char_traits为 wchar_t。

【问题讨论】:

不需要宏。更多信息:en.cppreference.com/w/cpp/language/string_literal 我使用了不同种类的字符串修饰符,例如 U、u、r。编译器会忽略它 奇数。什么编译器? 我使用 g++(Windows 上的 minGW 64 位版本。字符串 litteral 修饰符似乎工作正常,我弄错了。抱歉 我认为 gcc 使用 32 位 wchar_t 而不是微软的 16 位?在这种情况下,可能无法创建 UTF-16 文字。 【参考方案1】:

从 C++11 开始,有多种方法可以为字符串文字和字符串对象指定 UTF-16。它引入了 char16_t 用于 UTF-16 字符,std::u16string 用于 UTF-16 字符串,u prefix 用于 UTF-16 文字。

std::u16string str = u"Hello World";

编译器负责将源代码中的字符转换为适当的文字字符值。

【讨论】:

以上是关于c++ 编译器如何从 utf8 源文件生成 unicode 字符串文字的主要内容,如果未能解决你的问题,请参考以下文章

C++给Java写程序

如何在 azure app 服务中使用 cl.exe 编译 c++ 代码并生成可执行文件

C++源文件从文本到可执行文件经历的过程?

经验分享如何查看C++生成的汇编代码?

这段代码安全吗,可以从构造函数 C++ 生成线程吗?

如何从 windows10 中的命令提示符生成 opencv 3.0 c++ 程序的 .exe?