[英]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_t
到char16_t
转换并使用u16string
,但这不会带来太多好处。
pugixml中的保存和加载函数采用xml_encoding
参数,该参数允许您选择程序外部数据的编码,并且不必与内部使用的编码相匹配。 选择最方便的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.