使用日文文本存储字符串并写入文件

时间:2011-08-03 08:01:14

标签: c++ unicode encoding file-io

我想将日文文本存储在字符串中并将其写入文件。我对编码完全不熟悉,而且C ++中有很多数据类型,比如wchar_t和wstring,这对我来说很困惑。我怎么能这样做?

我正在尝试创建格式良好的XML文件,其中一些CDATA内容为日文。

3 个答案:

答案 0 :(得分:5)

完全忽略宽字符串的复杂性和陷阱;并确保使用UTF-8编码您正在处理的数据。

在C ++中,UTF-8字符串可以像扩展的ASCII字符串一样处理;除非你碰巧实际操纵它们(砍掉它们,计算字符,类似的东西)。

如果你所关心的只是收集,存储和显示字符串,那简直就是可笑的琐碎。

(如果没有关于您工作环境的更多信息,就无法准确地告诉您如何确保UTF-8-ness;但这确实超出了这个问题的范围。)

修改

回应关于您打算做什么的评论(编写XML文件):

特别是使用XML ;它非常非常简单:

永远不要使用UTF-8!或“N'DUUH!”简而言之。

在XML中,ASCII平衡将在实践中 始终使得UTF-8是最节省空间的编码系统。

(也就是说,如果文档中的每个日文字符都可以用ASCII字符匹配,则UTF-8在空间方面与UTF-16完全一样有效.XML元素名称传统上是不必要的冗长,日语句子众所周知紧凑;当添加缩进时,日文文本几乎总是与ASCII相匹配。)

答案 1 :(得分:0)

wchar_tstd::wstring可以存储unicode文本,因此管理它们并将其写入文件是安全的。

请注意sizeof(wchar_t)== 2和sizeof(char)== 1

::WriteFile(m_hFile, strString.c_str(), strString.length()*sizeof(wchar_t), pdwWritten, NULL) 

答案 2 :(得分:0)

  

我正在尝试创建格式良好的XML文件,其中一些CDATA内容为日文。

这不一定是个好主意。 xml:lang属性通常用于指示XML中包含的文本所使用的语言,并且不能将属性应用于CDATA部分。所以这些应该是某种XML元素,它可以有一个适当的xml:lang属性。

无论如何,您需要选择一种编码。整个文件必须具有相同的编码。因此,请确保在XML标头中指定您的编码。请不要让XML解析器猜测你的编码。

如果您习惯于编写字节,我建议使用UTF-8,因为您可以回避在其他平台上可能遇到的许多字节序问题。每个UTF-8代码单元都是char,因此您可以使用std::string来保存这些代码(尽管您必须仔细处理它们)。