gpt4 book ai didi

c++ - 嵌入式软件上的 Unicode 字符串

转载 作者:行者123 更新时间:2023-11-30 00:53:24 25 4
gpt4 key购买 nike

我需要使用 C++ 在嵌入式设备上编写应用程序。我可能也需要支持 Unicode(尽管我不是这方面的专家)。我有也可以看看 Joel Spoolsky 关于 Unicode 的文章:http://www.joelonsoftware.com/articles/Unicode.html

我的问题是我上面提到的,使用 Unicode 的方式是什么在这样的 C++ 应用程序中?我应该到处使用 wchar_t 吗?还是 std::wstring?

一直使用wchar_t可能会遇到什么问题? (这篇文章提到了 unicode 字符串可能会遇到的一些问题:Switching from std::string to std::wstring for embedded applications? - 但我仍然有点困惑,不知道该怎么做)。

最佳答案

“支持”Unicode 很好超越使用 wchar_tstd::wstring(它们仅仅是“适合某些宽字符的类型”根据当前的语言环境和平台,可能是也可能不是真正的 Unicode 编码”)。

想想 isalpha()、标记化、转换为/来自不同编码等,您就明白了。

除非您知道,否则您可以使用 wchar_t/std::wstring 等内置内容(而且您不会问在那种情况下),你最好使用 ICU库,它是 Unicode 支持 的最先进实现。 (即使是其他方面值得推荐的 Boost.Locale 也依赖于 ICU 来提供实际逻辑。)

在 ICU 中执行 Unicode 的 C 方式是 UChar [] (UTF-16) 类型的数组,C++ 方式是 icu::UnicodeString 类。我碰巧使用一个遗留代码库,该代码库竭尽全力与 UChar [] 一起“凑合”以获得性能声明(共享引用、内存池、写时复制等),但仍然无法胜过 icu::UnicodeString,因此即使在嵌入式环境中,您也可以放心使用后者。他们在那里做得很好。

Post scriptum:请注意,wchar_t 是实现定义的长度;我所知道的 Unix 上是 32 位,Windows 上是 16 位——这带来了额外的麻烦,因为 wchar_t 应该是“宽的”,但 UTF-16 在涉及 Unicode 时仍然是“多字节”。如果您可以依赖支持 C++11 的环境,char16_t resp。 char32_t 会是更好的选择,但仍然不知道像组合字符这样的精细打印。

关于c++ - 嵌入式软件上的 Unicode 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16583122/

25 4 0
文章推荐: c++ - 使用基类指针调用派生类中的非虚函数
文章推荐: c++ - void init(Handle exports) 中的 是什么