utf-8和unicode转换问题

最近,参加的ssl vpn客户端遇到了两个新问题:

1,隧道建立模块建立远程连接失败,原因是,读取的配置文件中 用户名称不是UTF-8的

2,托盘上显示中文用户名称为乱码

在网上搜了一番,解决放入如下:

首先要做的是,把之前写入配置文件的unicode字符,转换成utf8格式输入

oFile.open(aupPath,std::ios_base::trunc);

//转换m_userName中的内容为utf8

int u8len=::WideCharToMultiByte(CP_UTF8, NULL, m_userName, wcslen(m_userName), NULL, 0, NULL, NULL);

char* szU8 =new char[u8len + 1];

 ::WideCharToMultiByte(CP_UTF8, NULL, m_userName, wcslen(m_userName), szU8, u8len, NULL, NULL);

szU8[u8len] = '\0';


oFile<<szU8<<std::endl; //用户名

这样原先的m_userName中包含的unicode字符串被成功转换为utf8供隧道模块读取。


其次,托盘显示读取的时候,需要将utf8再转换为unicode,即utf8Buffer转换为m_userName

iFile.open(filepath,std::ios_base::_Nocreate);
iFile.getline(utf8Buffer,MAX_PATH);
int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, utf8Buffer, strlen(utf8Buffer), NULL, 0);
::MultiByteToWideChar(CP_UTF8, NULL, utf8Buffer, strlen(utf8Buffer), m_userName, wcsLen);
m_userName[wcsLen]='\0';

成功解决此问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值