我正在将unicode文本(存储为wstring
)写到一个文件中,并且是以字节模式写的,但是文件中的字符串在打印"™“字符之前结束。是"™“不是unicode,还是我做错了什么?
wofstream output;
outp.open("output.txt", ofstream::binary);
wstring a =L"ABC™";
output << a;
发布于 2015-01-30 15:52:02
TM绝对是unicode。ofstream和wofstream不会以UTF-8格式写入文本。您必须以UTF-8对输出缓冲区进行编码,才能看到预期的结果。所以,试着使用"WideCharToMultiByte“。
发布于 2015-01-30 16:55:34
关于iostream二进制模式有一个常见的误解:它是读/写二进制文件。iostream库只能处理文本文件,并且只能读写文本文件。“二进制”模式唯一改变的是如何处理NL (新行)字符。在binary more中,不会发生任何转换。在非二进制模式下,将LF字符('\n')写入到流中会将其转换为平台特定的新行序列(Unix -> LF、Windows -> CR LF ("\r\n")、Mac -> CR),而在读取时,平台特定的新行序列将转换为单个LF ('\n')字符。
对于其他所有内容,没有任何变化,这意味着wofstream将始终将Unicode宽的字符串转换为单字节或多字节字符流,这取决于您的进程所使用的语言环境。例如,如果你在Linux上有一个"en_US.utf8“的区域设置,它将被转换成UTF8。现在,如果当前区域设置没有TM Unicode符号的表示形式,则要么为nothing,要么为'?‘将被写入该文件。
https://stackoverflow.com/questions/28238327
复制