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

标签 c++

我需要使用 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/

相关文章:

C++奇怪的ifstream重新分配值错误

c++ - 将字符包装在凯撒密码编码中

c++ - 中途反转/交换

c++ - 在跨平台 C 和 C++ API 中使用字符串的当前最佳实践是什么?

c++ - CMake 无法找到 gRPC 库,即使它们已安装 (mac)

c++ - 谷歌模拟 : how can I "EXPECT " that no method will be called on a mock

C++ 点在浮点坐标精度中的旋转

c++ - 以编程方式获取用于在非开发人员 Windows 环境中构建进程或库的 DLL 列表

c++ - 如何找到存储在 C++ vector 中的对象的类方法?

c++ - Cublas 矩阵 LU 分解