如何使用 UTF-8 字符序列在 C++ 中初始化 const char* 和/或 const std::string?

Posted

技术标签:

【中文标题】如何使用 UTF-8 字符序列在 C++ 中初始化 const char* 和/或 const std::string?【英文标题】:How to initialize a const char* and/or const std::string in C++ with a sequence of UTF-8 character? 【发布时间】:2010-10-07 11:44:08 【问题描述】:

如何在 C++ 中使用 UTF-8 字符序列初始化 const char* 和/或 const std::string?

我正在使用接受 UTF8 字符串作为 const char* 的正则表达式 API。初始化代码应该是平台无关的。

【问题讨论】:

可用选项取决于您使用的编译器。 很容易。 const char* c = "ěščř";。只需将文件保存为 UTF-8 编码即可。 这些选项还取决于 UTF-8 字符串在源代码中的可读性。 运行时提供的任意字符串,还是编译时已知的字符串?如果是前者,它是如何提供的?作为一种特殊情况,如果是后者,并且如果您的字符串仅包含 ascii(7 位)字符,则 UTF-8 与这些字符的 ascii 相同,因此只需使用字符串文字。 const char *utf8_string = "hello, world";。当然,假设您的平台使用 ascii 作为其基本编码。 【参考方案1】:

这应该适用于任何编译器:

const char* twochars = "\xe6\x97\xa5\xd1\x88";

【讨论】:

【参考方案2】:

编译器 - 独立答案也是: 将文件保存为 UTF-8 无 BOM 签名编码。

const char* c = "ěščř"; //Just save the file in UTF-8 without BOM signature.

(见问题的评论。) 顺便说一句,Windows 控制台必须设置为 UTF8。有关更多详细信息,请参阅 post 到 question。

【讨论】:

这应该是当今推荐的做法。明确说明您的所有源代码都是 UTF-8,没有 BOM,不例外,始终对所有文件使用 UTF-8,然后按照 C/C++ 标准方式支持的方式初始化常量字符串。

以上是关于如何使用 UTF-8 字符序列在 C++ 中初始化 const char* 和/或 const std::string?的主要内容,如果未能解决你的问题,请参考以下文章

在Python 3.8.2中,如何将包含' uxxxx'序列的字符串转换为utf-8?

如何在 C++ 中使用 UTF-8 和 Unicode? C++20 char8_t 有多大?

如何将 C++ 中的空字符序列转换为 Python 中的等效字符?

如何使用带有 UTF-8 字符的 json4s 序列化 JSON?

如何使用 C++ 将 ISO-2022-KR 编码转换为 UTF-8 编码?

如何在 C++ 非托管代码 Json 中反序列化一个字节 [] 的 json 字符串?