UNICODE编程环境下,CStdioFile的WriteString(),不能将中文写入文件,求助 英文可以!对文件时,读出的中文是乱码!不知道为什么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ansii ? or binary mode? UNICODE,用的是CFile::typeText模式binary mode试过,也不行! could u please give me a example?[email protected] CStdioFile addFile;addFile.Open(m_filePath,CFile::modeRead|CFile::typeText,NULL);CString name=TEXT("");addFile.ReadString(name);MessageBox(name,NULL,MB_OK);得到的就是乱码,注意是UNICODE环境,非UNICODE环境一切正常!CStdioFile addFile;addFile.Open(m_filePath,CFile::modeWrite|CFile::typeText,NULL);CString name=TEXT("a中华人民共和国");addFile.WriteString(name);MessageBox(name,NULL,MB_OK);结果文件里只有一个a 1.no close method called.2. CStdioFile is a c style stream, support unicode ? SORRY应该加上close();支持,英文行,中文不行我试验了,CFile也不能写unicode中文! thank you!谢谢你的热心! o m g,不结帖不能送啊! 是不行呀.调试的时候就没有看到中文,如果只有中文的话也没有问题的.用_tfopen的方式可以.用std::basic_fstream<TCHAR> 吧 这个问题其实是这样产生的,我们写进去的只是数据而没有去写UNICODE文本标志。UNICODE文本标志是(用UltraEdit的16进制打开)在文件的开头两个数据应该是 0xFF 0xFE因为我们没有写这两个值,所以看起来就是乱码。“语文"的ANSI文本是这样的:ED 8B 87 65"语文"的UNICODE文本是这样的:FF FE ED 8B 87 65 似乎有道理.不过那CString怎么说呢? CString 本身是支持 ANSI和UNICODE的,在我看来问题出在 Microsoft在 文件的读写方面的nOpenFlags 没有一个指定是按 UNICODE还是按照 ANSI来进行的。就因为这样所以这些函数或者API就没有办法判断是否写 0xFF 0xFE标志位。 debug到这里时CString name=TEXT("a中华人民共和国");到下一行的时候.监视的name="a"; 代码大致应该这样写:void CTest1Dlg::OnButton1() { // TODO: Add your control notification handler code here CFile myFile; myFile.Open(_T("ab.txt"),CFile::modeCreate | CFile::modeWrite); static const TCHAR sz[] = _T("语文数学abcde物fghjik理");#ifdef _UNICODE char szBOM[] = "\377\376"; //注意:为什么是这两个数字?我也搞不清楚啊! #define SIZEOFBOM 2 myFile.Write(szBOM, SIZEOFBOM);#endif myFile.Write(sz, lstrlen(sz)*sizeof(TCHAR)); myFile.Close();} 呵呵,我知道这样可以..用CString . 如果在前面加两个的话我看_tfopen还要方便一些 试试不用CString用TCHAR能不能输出UNICODE, 我怀疑是不是_UNICODE宏没有起作用.CStdioFile addFile;addFile.Open(m_filePath,CFile::modeWrite|CFile::typeText,NULL);TCHAR name[]=TEXT("a中华人民共和国");addFile.WriteString(name);MessageBox(name,NULL,MB_OK); 果然还是要用TCHAR我还想TCHAR在VC中能不能用呢! 或者试试这个,没有_UNICODE也应该输出UNICODE的汉字.wchar_t name[]=L"a中华人民共和国";addFile.WriteString(name);完了用UltraEdit(不要用NotPad)看看成功没有. Hanzo(不肯冷却的芯) ,不用CString,用TCHAR也不行! char szBOM[] = "\377\376"; 等于 char szBOM[] = "\x0FF\x0FE"; 用八进制的数表示字符. 同意 StdAfx(任杰): SFM checks the file to see if it is formatted in Unicode. Unicode files can be identified when opened with a hexadecimal editor by the first four nibbles, which are always FF FE (assuming UTF-8 encoding). SFM : Services For Macintosh 问题基本解决,只是不知道为什么CFile::typeText写不进汉字。用CFile::typeBinary是可以写入的!但写入的东西如果想用wordpad查看的话,需要写入oxff和oxfe以标记写入的是unicode读取的时候要把第一行的oxff和oxfe delete掉。就可以得到正确的unicode码了!结帖,发分!继续讨论[email protected] 另外用unicode方式读文件,文件要确保保存成了unicode格式ttzzgg_80713(50),StdAfx(任杰)(50) 关于VFW的操作,高手请进 'IDM_ABOUT' : undeclared identifier !!!!!!!!! 急 谢谢! 请教各位,公网如何得到内网的IP地址,并向内网发送信息!!! 怎么使combo下拉啊? api钩子 郁闷:学历代表一切吗? 如何截获CTRL+C/CTRL+V的消息。 怎样将执行文件做成发布版? VC++6.0使用Dependency Walker打开DLL文件,查看详细的函数内容出现问题? 是我错吗?还是小比尔的错? 一百分,doc/view框架时如何在view中使用CListctrl? msn的分组列表是不是使用CListctrl? 关于多线程问题
binary mode试过,也不行!
[email protected]
addFile.Open(m_filePath,CFile::modeRead|CFile::typeText,NULL);
CString name=TEXT("");
addFile.ReadString(name);
MessageBox(name,NULL,MB_OK);
得到的就是乱码,注意是UNICODE环境,非UNICODE环境一切正常!
CStdioFile addFile;
addFile.Open(m_filePath,CFile::modeWrite|CFile::typeText,NULL);
CString name=TEXT("a中华人民共和国");
addFile.WriteString(name);
MessageBox(name,NULL,MB_OK);
结果文件里只有一个a
2. CStdioFile is a c style stream, support unicode ?
应该加上close();支持,英文行,中文不行
我试验了,CFile也不能写unicode中文!
谢谢你的热心!
UNICODE文本标志是(用UltraEdit的16进制打开)在文件的开头两个数据应该是 0xFF 0xFE
因为我们没有写这两个值,所以看起来就是乱码。“语文"的ANSI文本是这样的:
ED 8B 87 65
"语文"的UNICODE文本是这样的:
FF FE ED 8B 87 65
nOpenFlags 没有一个指定是按 UNICODE还是按照 ANSI来进行的。就因为这样所以这些函数或者API就没有办法判断是否写 0xFF 0xFE标志位。
CString name=TEXT("a中华人民共和国");
到下一行的时候.
监视的name="a";
{
// TODO: Add your control notification handler code here
CFile myFile;
myFile.Open(_T("ab.txt"),CFile::modeCreate | CFile::modeWrite);
static const TCHAR sz[] = _T("语文数学abcde物fghjik理");
#ifdef _UNICODE
char szBOM[] = "\377\376"; //注意:为什么是这两个数字?我也搞不清楚啊!
#define SIZEOFBOM 2
myFile.Write(szBOM, SIZEOFBOM);
#endif
myFile.Write(sz, lstrlen(sz)*sizeof(TCHAR));
myFile.Close();
}
用CString .
addFile.Open(m_filePath,CFile::modeWrite|CFile::typeText,NULL);
TCHAR name[]=TEXT("a中华人民共和国");
addFile.WriteString(name);
MessageBox(name,NULL,MB_OK);
我还想TCHAR在VC中能不能用呢!
addFile.WriteString(name);完了用UltraEdit(不要用NotPad)看看成功没有.
用八进制的数表示字符.
SFM checks the file to see if it is formatted in Unicode. Unicode files can be identified when opened with a hexadecimal editor by the first four nibbles, which are always FF FE (assuming UTF-8 encoding). SFM : Services For Macintosh
用CFile::typeBinary是可以写入的!但写入的东西如果想用wordpad查看的话,
需要写入oxff和oxfe以标记写入的是unicode读取的时候要把第一行的oxff和oxfe delete掉。就可以得到正确的unicode码了!
结帖,发分!
继续讨论[email protected]
ttzzgg_80713(50),
StdAfx(任杰)(50)