最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

unicode:使用std :: fstream编写UTF16文件

XAMPP案例 admin 630浏览 0评论

Writing UTF16 file with std::fstream

是否可以注入std :: fstream,以便可以将包含UTF-8编码的std :: string流式传输到UTF-16文件?

我尝试使用utf8-to进行以下操作-utf16构面,但结果文件仍为UTF-8:

1
2
3
4
5
6
7
std::fstream utf16_stream(“test.txt”, std::ios_base::trunc | std::ios_base::out);
utf16_stream.imbue(std::locale(std::locale(), new codecvt_utf8_utf16<wchar_t,
std::codecvt_mode(std::generate_header | std::little_endian)>);

std::string utf8_string =”\\x54\\\\xE2\\x83\\xac\\x73\\x74″;

utf16_stream << utf8_string;

codecvt_utf8_utf16构面的引用似乎表明它可用于读取和写入UTF-8文件,而不是UTF-16-是正确,如果可以的话,是否有一种简单的方法可以做我想做的事情?

  • 内部使用UTF-8,外部使用UTF-16是错误的。如果UTF-16作为内部编码有意义,则可以简化所有被误导为原生使用UTF-16的90年代API的使用。
  • @ bames53-要求与不幸地读写\\\\” UTF16LE \\\\”文件的Windows应用程序兼容(尽管考虑到我过去几周遇到的困难数量,它们实际上可能是某种Microsoft UCS2格式的厌恶)。

 

文件流(由于std::basic_filebuf §22.4.1.4.2[locale.codecvt.virtuals]/3的要求)不支持N:M字符编码转换,就像内部UTF8 /外部UTF16一样。

您已经必须构建一个UTF-16字符串,例如通过使用wstring_convert,将其重新解释为字节序列,然后使用通常的(非转换)std::ofstream。

进行输出,或者,也可以先将UTF-8转换为wide,然后使用std ::产生UTF-16作为字节序列的codecvt_utf16,因此可以与文件流一起使用。

  • 我猜这也意味着我不能使用codecvt_mode标志来确保输出的字节序和BOM-我也必须自己写那些吗?
  • @MadKeithV对..但是如果您要使用utf-8->宽-> utf-16,则可以使用它们

转载请注明:XAMPP中文组官网 » unicode:使用std :: fstream编写UTF16文件

您必须 登录 才能发表评论!