首页 技术 正文
技术 2022年11月19日
0 收藏 678 点赞 2,836 浏览 2099 个字

<1>.GBK —> UTF-8

void ConvertGBKToUtf8(CString& strGBK)
{
int len = MultiByteToWideChar(CP_ACP, , (LPCTSTR)strGBK, -, NULL, );
WCHAR *wszUtf8 = new WCHAR[len+];
memset(wszUtf8, , len*+);
MultiByteToWideChar(CP_ACP, , (LPCTSTR)strGBK, -, wszUtf8, len); len = WideCharToMultiByte(CP_UTF8, , wszUtf8, -, NULL, , NULL, NULL);
char *szUtf8 = new char[len+];
memset(szUtf8, , len+);
WideCharToMultiByte(CP_UTF8, , wszUtf8, -, szUtf8, len, NULL, NULL); strGBK = szUtf8;
delete[] szUtf8;
delete[] wszUtf8;
}

<2>.UTF-8 —> GBK

void ConvertUtf8ToGBK(CString& strUtf8)
{
int len = MultiByteToWideChar(CP_UTF8, , (LPCTSTR)strUtf8, -, NULL, );
WCHAR *wszGBK = new WCHAR[len+];
memset(wszGBK, , len*+);
MultiByteToWideChar(CP_UTF8, , (LPCTSTR)strUtf8, -, wszGBK, len); len = WideCharToMultiByte(CP_ACP, , wszGBK, -, NULL, , NULL, NULL);
char *szGBK = new char[len+];
memset(seGBK, , len+);
WideCharToMultiByte(CP_ACP, , wszGBK, -, szGBK, len, NULL, NULL); strUtf8 = szGBK;
delete[] szGBK;
delete[] wszGBK;
}

————————————————————————————————

ps:

[1].MultiByteToWideChar
函数功能:该函数映射一个字符串到一个宽字符(unicode)的字符串。
函数原型:

int MultiByteToWideChar(
  UINT CodePage,
  DWORD dwFlags,
  LPCSTR lpMultiByteStr,
  int cchMultiByte,
  LPWSTR lpWideCharStr,
  int cchWideChar
  );

函数参数:
CodePage:指定执行转换的字符集,这个参数可以为系统已安装或有效的任何字符集所给定的值。
CP_ACP:ANSI字符集;CP_MACCP:Macintosh代码页;CP_OEMCP:OEM代码页;
CP_SYMBOL:符号字符集(42);CP_THREAD_ACP:当前线程ANSI代码页;
CP_UTF7:使用UTF-7转换;CP_UTF8:使用UTF-8转换。
dwFlags:一组未标记用以指出是否未转换成预作或宽字符(若组合形式存在),是否使用象形文字替代控制字符,以及如何处理无效字符。
lpMultiByteStr:指向将被转换字符串的字符。
cchMultiByte:指定由参数lpMultiByteStr指向的字符串中字节的个数。如果lpMultiByteStr指定的字符串以空字符终止,可以设置为-1(如果字符串不是以空字符中止,设置为-1可能失败,可能成功),此参数设置为0函数将失败。
lpWideCharStr:指向接收被转换字符串的缓冲区。
cchWideChar:指定由参数lpWideCharStr指向的缓冲区的字节数。若此值为零,函数返回缓冲区所必需的宽字符数,在这种情况下,lpWideCharStr中的缓冲区不被使用。

[2].WideCharToMultiByte
函数功能:该函数映射一个unicode字符串到一个多字节字符串。
函数原型:

int WideCharToMultiByte(
  UINT CodePage, //指定执行转换的代码页
  DWORD dwFlags,
  LPCWSTR lpWideCharStr, //指定的宽字节字符串的缓冲区
  int cchWideChar, //指定由参数lpWideCharStr指向的缓冲区的字符个数
  LPSTR lpMultiByteStr, //指向接收被转换字符串的缓冲区
  int cchMultiByte, //指定由参数lpMultiByteStr指向的缓冲区最大值
  LPCSTR lpDefaultChar,
  LPBOOL pfUsedDefaultChar
  );

*注意*:以上两个函数参数指针lpMultiByteStr和lpWideCharStr必须不一样,否则函数返回失败

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,412
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,185
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905