64,666
社区成员
发帖
与我相关
我的任务
分享
#include <locale>
#include <fstream>
using namespace std;
class UniFacet : public codecvt<wchar_t, char, mbstate_t>
{
protected:
virtual result do_in(mbstate_t&, const wchar_t*, const wchar_t*, const wchar_t&, wchar_t, wchar_t* , wchar_t&) const {return noconv;}
virtual result do_out(mbstate_t&, const wchar_t*, const wchar_t*, const wchar_t*, wchar_t*, wchar_t*, wchar_t&) const {return noconv;}
virtual result do_unshift(mbstate_t&, wchar_t*, wchar_t* , wchar_t*) const {return noconv;}
virtual int do_length( mbstate_t& , const wchar_t*, const wchar_t*, size_t) const _THROW0() {return 1;}
virtual bool do_always_noconv() const _THROW0() {return true;}
virtual int do_max_length() const _THROW0() {return 1;}
virtual int do_encoding() const _THROW0() {return 1;}
};
int madin()
{
//建一个Unicode的文本文件。
wchar_t wch[100]=L"a中文Chinese与英文English混排ss\",,可用MultiByteToWideChar转换,也可用mbstowcs转换";
wstring wstr=L"真是折腾人阿!!!";
wofstream UniFile;
UniFile.open("D:\\UniFile.txt",ios::out|ios::binary); //
locale locUni(locale::classic(),new UniFacet);
//这句解释一下,local::classic() 是loccale的一个静态成员函数,他返回一个当前使用的
//locale对象的一个引用,我们现在通过locale的一个构造函数,重新构造一个新的locale对象
//locUni,并把其中codecvt这个facet换成我们自己定义的UniFacet.
UniFile<<UniFile.narrow(0xFF); //设置文件标志;这两是窄字符,一般Unicode文本文件
UniFile<<UniFile.narrow(0xFE); //都以这两个字符作为其起始标志位。
UniFile.imbue(locUni); //改变locale;
UniFile<<wch<<UniFile.widen('\r')<<UniFile.widen('\n'); //回车换行都要宽字符化
UniFile<<wstr<<UniFile.widen('\r')<<UniFile.widen('\n');
UniFile<<"123456"<<UniFile.widen('\r')<<UniFile.widen('\n');
UniFile<<L"ABCDE"<<UniFile.widen('\r')<<UniFile.widen('\n');
UniFile<<34545678<<UniFile.widen('\r')<<UniFile.widen('\n');
UniFile<<L"这样就可以了"<<UniFile.widen('\r')<<UniFile.widen('\n');
UniFile.close();
system("pause");
return 0;
}
#include <string>
#include <fstream>
using namespace std;
int main()
{
wstring wstr(L"中文Chinese");
char BOM[] = {'\xFF', '\xFE'};//文件头,用于标示文本文件的格式
ofstream out("test.txt");
out.write(BOM, sizeof(BOM));//将文件头写入文件
out.write((const char*)wstr.c_str(), wstr.size() * sizeof(wchar_t));
out.close();
return 0;
}