先是定义了一个CString aa;
然后给CString赋值了aa = _T("这里是中文");然后建一个CStdioFile类,用打开文件不截断和写入方式打开。
然后用write函数写入对应的txt文件CStdioFile oufile;
//然后打开文件
outfile.open("1.xtx",CFILE::modecreat | CFILE::modewrite);
outfile.write(aa,_tcslen(aa));
outfile.close();
但是打开文件以后,里面的确实乱码~~~不是“这里是中文这句话”~~这是怎么回事呢~~???是不是unicode编码之类的问题~~之前在VC6的时候挺好的~~后来装了VS2010~~~就不行了~~一直不太懂unicode和原来的ASIC的区别啥的~~是内存再用的区别么~~??希望能说的通俗一些~~谢谢了~~
然后给CString赋值了aa = _T("这里是中文");然后建一个CStdioFile类,用打开文件不截断和写入方式打开。
然后用write函数写入对应的txt文件CStdioFile oufile;
//然后打开文件
outfile.open("1.xtx",CFILE::modecreat | CFILE::modewrite);
outfile.write(aa,_tcslen(aa));
outfile.close();
但是打开文件以后,里面的确实乱码~~~不是“这里是中文这句话”~~这是怎么回事呢~~???是不是unicode编码之类的问题~~之前在VC6的时候挺好的~~后来装了VS2010~~~就不行了~~一直不太懂unicode和原来的ASIC的区别啥的~~是内存再用的区别么~~??希望能说的通俗一些~~谢谢了~~
char* old_locale = _strdup( setlocale(LC_CTYPE,NULL) );
setlocale( LC_CTYPE, "chs" );CStdioFile oufile;
//然后打开文件
outfile.open("1.xtx",CFILE::modecreat | CFILE::modewrite);
outfile.write(aa,_tcslen(aa));
outfile.close();setlocale( LC_CTYPE, old_locale );
free( old_locale );
unsigned short int bom=0xfeff;
m_LogFile.Write(&bom,sizeof(short int));
在文件头写一次就够了。以后版本的MFC估计会提供相应的功能控制。
或者你可以用C函数库,fopen可以添加参数ccs指定打开文件的格式,但是它只能做到打开时识别,写入时不会自动写BOM,还得手动来。
这样它就会打开文件时自动识别文件BOM了,但是写入文件时必须制定是UTF-8还是UTF-16LE、UTF-16BE,否则还是以ANSI方式写入的。对应的BOM头必须手动写入。
CString strText(_T("这里是中文"));
try
{
CStdioFile file;
file.Open(_T("F:\\11.txt"), CFile::modeCreate|CFile::modeWrite);
BYTE buf[] = {0xFF, 0xFE};
file.Write(buf, sizeof(buf));
file.Write(strText, strText.GetLength() * sizeof(TCHAR));
file.Close(); }
catch (CException* e)
{
e->ReportError();
e->Delete();
}
写入那个buf是为了什么呢???还有就是如果我把字符集改成了多字节的~~那是不是可以像以前再vc六里面操作~~字符常量也不用用_T来转换了??那用多字节变法写出的程序会和unicode有什么不同吗~~~比如说是不是放到英文版的系统上会有乱码啥的~~~??
谢谢了
_tsetlocale这个事设置什么的???
最后想问问vs2010里面的MSDN文档是不是改成了web版的了~~~??