gpt4 book ai didi

c++ - C++中的字符串和字符编码

转载 作者:IT老高 更新时间:2023-10-28 23:00:32 26 4
gpt4 key购买 nike

我阅读了几篇关于 C++ 中字符串和字符编码的最佳实践的文章,但我在寻找一种在我看来相当简单和正确的通用方法方面有些困难。我可以就以下内容征求意见吗?我倾向于使用 UTF-8 和 UTF-32,并定义如下:

typedef std::string string8;
typedef std::basic_string<uint32_t> string32;

string8 类将用于 UTF-8,具有单独的类型只是对编码的提醒。另一种方法是让 string8 成为 std::string 的子类,并删除不太适合 UTF-8 的方法。

当需要固定字符大小时,string32 类将用于 UTF-32。

UTF-8 CPP 函数,utf8::utf8to32() 和 utf8::utf32to8(),甚至更简单的包装函数,将用于在两者之间进行转换。

最佳答案

如果你打算只传递字符串而不检查它们,你可以使用普通的 std::string 虽然这是一个穷人的工作。

问题在于,大多数框架,甚至是标准框架,都愚蠢地(我认为)在内存中强制执行编码。我说愚蠢是因为编码只在接口(interface)上很重要,而那些编码不适用于内存中的数据操作。

此外,编码很容易(它是一个简单的转置 CodePoint -> 字节,反之亦然),而主要的困难实际上是关于操纵数据。

对于 8 位或 16 位,您可能会在中间切掉一个字符,因为 std::stringstd::wstring 都不知道Unicode 字符是什么。更糟糕的是,即使使用 32 位编码,也存在将字符与适用于它的变音符号分开的风险,这也是愚蠢的。

因此,就标准而言,C++ 中对 Unicode 的支持非常低。

如果你真的想操作 Unicode 字符串,你需要一个支持 Unicode 的容器。通常的方法是使用 ICU 库,尽管它的界面是真正的 C-ish。但是,您将获得在 Unicode 中使用多种语言实际工作所需的一切。

关于c++ - C++中的字符串和字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3950588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com