[问题]MFC中读取文件出现乱码

wssdr0905 2009-08-19 11:33:22
程序是unicode的读取.xml(utf-8) 这样读就会乱码 编译器是VS2005
CString filetext ;
if(pFile.Open(fileName,CFile::modeRead))//|CFile::typeBinary
{
while(1)
{
int len = pFile.Read(context,200);
char* ToText;
ToText = new char[200];
memset(ToText,0,200);
int pii = MultiByteToWideChar(CP_UTF8,MB_USEGLYPHCHARS,context,200,(LPWSTR)ToText,len);
if(pii == 0) pii = GetLastError();
CString tmp = CA2T(context);
tmp = tmp.Left(len);

filetext = filetext + tmp;

if (len < 200)
{
break;
}
}
}
pFile.Close();
...全文
348 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
纠结的程序猿 2009-08-20
  • 打赏
  • 举报
回复
楼主能否把你的UTF-8文件发到这个邮箱,我来看看。pilotedit@gmail.com
I_NBFA 2009-08-19
  • 打赏
  • 举报
回复
对了,再提醒下,void UTF8toUnicode(LPCSTR szUTF8, CString& strUnicode)
void UTF8toUnicode(LPCSTR szUTF8, CStringW& strUnicode)更精确,
如果你程序不是unicode版的,注意这点.
I_NBFA 2009-08-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wu_qing_yun 的回复:]
我有UNICODE工程读取UNICODE文件的代码,关键点就在于,UNICODE文件头是以EE,EF开头的,读取时必须跳过这两个字节。请楼主笑纳:http://blog.csdn.net/wu_qing_yun/archive/2009/08/11/4435878.aspx

结分吧~~
[/Quote]

这个程序假设的是UTF16吧.
I_NBFA 2009-08-19
  • 打赏
  • 举报
回复
UTF8是3字节头,跳过去也没用的,我试过.

void UTF8toUnicode(LPCSTR szUTF8, CString& strUnicode){

// 计算需要空间大小
int nUnicodeSize = ::MultiByteToWideChar(CP_UTF8, 0, szUTF8, -1, NULL, 0);
// 申请空间
WCHAR* szUnicode = new WCHAR[nUnicodeSize];
// 转换
::MultiByteToWideChar(CP_UTF8, 0, szUTF8, -1, szUnicode, nUnicodeSize);
strUnicode.Empty();
strUnicode = szUnicode;
delete[] szUnicode;
}


这个函数假设szUTF8以0结尾.
码侬 2009-08-19
  • 打赏
  • 举报
回复
UTF-8 好像是以EF BB BF开头吧
楼主可以新建一个文本文件,保存的时候选择编码方式,然后用 WinHex 打开看一下
wu_qing_yun 2009-08-19
  • 打赏
  • 举报
回复
是以FF,FE开头
wu_qing_yun 2009-08-19
  • 打赏
  • 举报
回复
我有UNICODE工程读取UNICODE文件的代码,关键点就在于,UNICODE文件头是以EE,EF开头的,读取时必须跳过这两个字节。请楼主笑纳:http://blog.csdn.net/wu_qing_yun/archive/2009/08/11/4435878.aspx

结分吧~~
wssdr0905 2009-08-19
  • 打赏
  • 举报
回复
你能给我 UTF8转Unicode都是双调用MultiByteToWideChar的代码吗。简单些
I_NBFA 2009-08-19
  • 打赏
  • 举报
回复
UTF8是采用unicode字符集,使用多字节编码,但好象不属于ANSI, 所以A2W什么的用不了,另外你也没
调用USES_CONVERSION吧?
那个MultiByteToWideChar,使用CP_UTF8时第2个参数必须为0,然后计算需要的空间.
我一般UTF8转Unicode都是双调用MultiByteToWideChar.
wssdr0905 2009-08-19
  • 打赏
  • 举报
回复
帮忙的啊,请人回答下的哦
码侬 2009-08-19
  • 打赏
  • 举报
回复
楼主是想把 utf-8转成unicode吧,
手工转不行吗?
如果 <128,前面加上0x00
如果 >128, 连读两个字节

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧