我想在C++
(我的系统是OSX
)中为日语实现一些字符串处理。这听起来比听起来要困难得多。我读了很多,但基本的东西仍然有问题。
我希望我的代码也可以在其他机器上编译和运行。到目前为止,这似乎排除了wchar_t data type
。
datatype
代表我的日文字符? char-data type
的错误。那我应该使用什么其他数据类型? wide-char
语言与standard c++
没有陷阱的方法,或者如果我坚持使用标准c++
,我是否总是创建一个系统依赖的代码? 答案 0 :(得分:3)
为什么不wchar_t
和wstring
?是的,它在某些平台上是4个字节,在其他平台上是2个字节;但是,它具有围绕它构建一堆字符串处理RTL例程的优点。 Cocoa的NSString / CFString是每个字符2个字节(如Windows上的wchar_t),但它非常难以移植。
您必须注意持久性和有线格式 - 确保它们不依赖于wchar_t的大小。
取决于您的优化优先级。如果您有强烈的处理(解析等),请使用wchar_t。如果您希望与主机系统顺利交互,请选择与主机操作系统的假设相匹配的任何格式。
将wchar_t
重新定义为两个字节也是一个选项。与GCC一起-fshort-wchar
。您将失去整个wcs * RTL和STL的很大一部分,但在与主机系统交互时,代码页翻译的次数会减少。它发生在两个大名称移动平台(一个以水果为主题,一个以机器人为主题)碰巧有两个字节字符串作为其原生格式,但默认情况下为4字节wchar_t。 -fshort-wchar
同时适用于我,
以下是桌面和移动平台的简要摘要:
答案 1 :(得分:1)
- 我应该用哪种数据类型代表我的日文字符?
您应该使用的表示取决于您想要做什么。 char32_t
可以保存整个代码点,但这并不一定能解决您的问题。
- 如果我使用
char
,我会收到数据不适合char-data类型的错误。那我应该使用什么其他数据类型?
您绝对可以使用正确的编码将日语数据存储在char
中。例如,UTF-8非常常见,并且是OS X上的默认设置。以下代码适用于OS X,其中clang和linux使用gcc。如果将输出重定向到文本文件(并使用一些技巧来从VC ++中取出UTF-8字符串文字),它也适用于Windows。
#include <iostream>
int main() {
std::cout << "キティ・ホワイト\n";
}
其他可能性是16位整数类型(UTF-16和UCS-2编码),32位整数类型(UCS-4 / UTF-32),用于保存完整字符的自定义类型&#39;在您的系统中(使用动态分配或组合代码点或其他方案的限制)。
- 有没有可接受的方法来处理带有标准c ++的宽字母语言而没有陷阱,或者如果我坚持使用标准c ++,我是否总是创建一个依赖于系统的代码?
无论这种未指明的&#39;处理&#39;是的,如果它可以在任何地方完成,那么可以通过标准的便携式c ++来实现。根据您的需要,您可能希望使用类似ICU的库,并且您选择的库可能会指示您对文本使用的表示形式。例如,ICU适应不同的编码,但我认为它本身就是UTF-16。