繁体   English   中英

用什么来存储Unicode(UTF-16)字符串? (C ++ 11)

[英]What to use to store Unicode (UTF-16) strings? (C++11)

我根据C ++ 11带来的创新,即uchar16_t / u16string来提出这个问题。

我写了一个应该有多语言支持的应用程序。 根据我的计划,本地化字符串将以XML格式存储为UTF-16,并使用pugixml进行检索。 这些字符串既可用于GUI,也可用于生成计算结果的HTML报告。 由于我已经将wchar_t / wstring理解为不赞成使用新的u16string,因此我计划使用u16string在程序中存储语言字符串。 但是既然pugixml和MFC的CString都使用wchar_t作为Unicode的下划线存储类型,我现在应该忘记u16string而是直接使用wstring吗?

语言可移植性至关重要,平台可移植性无关紧要。

我使用MVS 2013和英特尔编译器。

用于在程序外部存储数据的编码是唯一重要的。

该数据可能会从其他软件中使用。 有人会想要写这些字符串,他们可能会使用某种专门的编辑器或喘气一般的文本编辑器。 UTF-8比UTF-16更好地支持其他软件,这就是我的建议和原因。

在程序内部,您使用的编码无关紧要,只要您始终如一地执行它并且不要以愚蠢的方式混合它们。

显然,如果你在程序中使用与在其外部相同的编码,则不需要执行任何转换,并且存在将它们混合并产生mojibake的风险。

pugixml使用wchar_t的东西是它使用的编码取决于wchar_t的大小。 如果大小为2,则使用UTF-16; 如果大小为4则使用UTF-32。 通过适当地设置PUGIXML_WCHAR_MODE宏,pugixml还可以选择使用带char的UTF-8,因此您可以使用它。

如果您使用wchar_t API,请坚持使用wstring 请记住:因为我们在程序中,所以只要我们是一致的,它将是UTF-16还是UTF-32并不重要。 如果您使用char API,请坚持使用string 我想,你可以执行从wchar_tchar16_t转换并使用u16string ,但这不会带来太多好处。

pugixml中的保存和加载函数采用xml_encoding参数,该参数允许您选择程序外部数据的编码,并且不必与内部使用的编码相匹配。 选择最方便的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM