如何使用 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?