嵌入式软件上的Unicode字符串

pse*_*127 1 c++

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

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

在使用wchar_t时我可能会遇到什么问题?(这篇文章提到了unicode字符串可能会遇到的一些问题:从嵌入式应用程序的std :: string切换到std :: wstring? - 但我仍然感到困惑,因为不知道该怎么做).

Dev*_*lar 6

"支持"Unicode 远远超出使用wchar_t或std::wstring(它们仅仅是"适用于某些宽字符编码的类型,根据当前的语言环境和平台,这些编码可能实际也可能不是Unicode").

想象一下isalpha(),标记化,转换到/从不同的编码等,你得到的想法.

除非你知道你可以使用像wchar_t/ 那样的内置函数std::wstring(并且在这种情况下你不会问),你最好使用ICU库,这是Unicode 支持的最先进的实现.(即使是另外推荐的Boost.Locale依靠ICU来提供实际的逻辑.)

在ICU中执行Unicode的C方式是类型UChar [](UTF-16)的数组,C++方式是类icu::UnicodeString.我碰巧使用遗留代码库,这些遗留代码库非常适合" UChar []声明性能"(共享引用,内存池,写入时复制等),但仍然无法超越icu::UnicodeString,因此您可能会觉得安全即使在嵌入式环境中也使用后者.他们在那里做得很好.

后脚本:注意wchar_t实现定义的长度; 在我所知道的Unix上是32位,在Windows上是16位 - 由于wchar_t应该是"宽" 而给出了额外的麻烦,但是当谈到Unicode时,UTF-16仍然是"多字节".如果你可以依赖于支持C++ 11的环境,请char16_t分别说明.char32_t将是更好的选择,但仍然不能像组合字符那样更精细的印刷.