在Windows中创建.txt文件时,有四种编码选项。
C标准库支持此选项,方法是使用FILE
。
FILE* file;
file = _wfopen(L"test.txt", L"wt+,ccs=UTF-16LE");
它一直很好用,但我发现std::ofstream
中没有参数。
wofstream myfile;
myfile.open("example.txt", ?????????);
所以,我想知道如何在C ++中创建这样的文件。在C ++ STL中有没有解决方案?
答案 0 :(得分:4)
从C ++ 11开始,标准C ++库允许使用以下步骤生成UTF16文本文件:
std::codecvt_utf16
构建语言环境 - 您可以在构造函数中指定字节顺序std::wofstream
打开文件,您将在其中编写unicode文本imbue
区域设置放入宽流并开始编写,最后选择以字节顺序标记字符(U + FEFF)开头这是一个改编自@HansPassant在其评论中引用的page的例子:
// codecvt_utf16: writing unicode string as UTF-16
#include <iostream>
#include <locale>
#include <string>
#include <codecvt>
#include <fstream>
int main ()
{
std::wstring str ( { 0xa8, 0xa9 });
std::locale loc (std::locale(), new std::codecvt_utf16<wchar_t>);
std::basic_ofstream<wchar_t> ofs ("test.txt");
ofs.imbue(loc);
std::cout << "Writing to file (UTF-16)... ";
ofs << (wchar_t) 0xfeff; // BOM
ofs << str;
std::cout << "done!\n";
return 0;
}
你得到一个utf16文件,以一个小尾数BOM开头并包含èé
(十六进制转储:
$ od -xc test.txt
0000000 fffe a800 a900
376 377 \0 250 \0 251
)
答案 1 :(得分:1)
没有&#34; C STL&#34;。 STL代表标准模板库。 C没有模板。您可能指的是C标准库和C ++标准库。
C标准库没有&#34;创建unicode&#34;或将文本转换为unicode或从unicode转换文本。 C标准库中没有_wfopen
。您正在使用Microsoft C运行时库中的函数。
C ++库确实有一个API可以在(UTF-8和UTF-16)和(UTF-8和UTF-32)以及(系统本机宽和系统本机多字节)编码之间进行转换:http://en.cppreference.com/w/cpp/locale/codecvt < / p>
标准库中几乎没有任何其他unicode支持。您必须注意您正在编写的字符串符合您希望的编码,如果需要,您必须明确写出BOM。