在字节模式下将宽字符串写入文件已停止

时间:2015-01-30 14:45:13

标签: c++ unicode wstring

我正在将unicode文本(存储为wstring)写入文件中,并且我在字节模式下执行此操作,但文件中的字符串在"™&#34之前结束;正在打印的字符。是"™"不是unicode或我做错了什么?

wofstream output;
outp.open("output.txt", ofstream::binary);
wstring a =L"ABC™";
output << a;

2 个答案:

答案 0 :(得分:0)

TM绝对是unicode。 ofstream和wofstream不会以UTF-8格式写入文本。您可以使用UTF-8对输出缓冲区进行编码,以便查看您期望的结果。因此,请尝试使用&#34; WideCharToMultiByte&#34;。

答案 1 :(得分:0)

关于iostream二进制模式存在一个常见的误解:它是读/写二进制文件。 iostream库仅适用于文本文件,仅适用于读写文本文件。唯一的事情是&#34;二进制&#34;模式更改是NL(新行)字符的处理方式。在二进制文件中,不会发生转换。在非二进制模式下,将LF字符(&#39; \ n&#39;)写入流将其转换为平台特定的新行序列(Unix - &gt; LF,Windows - &gt; CR LF(&#34) ; \ r \ n&#34;),Mac - &gt; CR)在阅读时,平台特定的新行序列将转换为单个LF(&#39; \ n&#39;)字符。

对于其他所有内容,没有任何变化,这意味着wofstream将始终将Unicode宽字符串转换为单字节或多字节字符流,具体取决于您的进程使用的语言环境。如果您的区域设置为&#34; en_US.utf8&#34;例如,在Linux上,它将转换为UTF8。现在,如果当前的语言环境没有TM Unicode符号的表示,那么要么没有,要么是&#39;?&#39;将被写入文件。