MFC项目采用Unicode编码,读取文本数据乱码转换函数

在MFC项目中使用Unicode编码时,需要转换读取的数据以避免乱码。本文介绍了两个函数:CharToUnicode将字节数据转换为Unicode,而UnicodeToChar则将Unicode字符转换为Char类型,确保字符串正确显示为本地语言。
摘要由CSDN通过智能技术生成

当MFC项目采用Unicode时,CStdioFile.ReadString读取到数据都是Unicode编码的,必须进行转换,不然就是乱码

// 字节数据转换成Unicode编码

int CharToUnicode(char *pchIn, CString *pstrOut)
{
 int nLen;
 WCHAR *ptch;

 if(pchIn == NULL)
 {
  return 0;
 }

 nLen = MultiByteToWideChar(CP_ACP, 0, pchIn, -1, NULL, 0);//CP_ACP是本地机器Local属性

//可以修改成指定语言GB2312 936. Shift-JIS 932 UTF-8 65001.
 ptch = new WCHAR[nLen];
 MultiByteToWideChar(CP_ACP, 0, pchIn, -1, ptch, nLen);
 pstrOut->Format(_T("%s"), ptch);

 delete [] ptch;

 return nLen;
}

实现CString的编码改变。使之能够显示成本地语言。

void function(CString &str)
{
 char *szBuf = new char[str.GetLength()+1];

  int i;
 for (i = 0 ; i < str.GetLength(); i++)
 {
  szBuf[i] = str.GetAt(i);
 }
 szBuf[i]='/0';
 CharToUnicode(szBuf , &str);

 delete []szBuf;
}

 

 

 

/
// 将Unicode字符转换为Char型字符
int UnicodeToChar(CString &strIn, char *pchOut, int nCharLen)
{
    if(pchOut == NULL)
    {
        return 0;
    }

    int nLen = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)strIn.GetBuffer(BUFFER_SIZE_KILO),-1, NULL, 0, NULL, NULL);
    nLen = min(nLen, nCharLen);
    WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)strIn.GetBuffer(BUFFER_SIZE_KILO), -1, pchOut,
        nLen, NULL, NULL);
   
    if(nLen < nCharLen)
    {
        pchOut[nLen] = 0;
    }

    return nLen;
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值