<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
在软件的使用过程中,经常碰到乱码的情况,那么乱码的原因是什么呢?其实很多情况下,就是字符集的不同,也就是说同一个数字代表不同意思。在Windows里,目前主要有ANSI和UNICODE的方式。如果在UNICODE的方式里直接显示ANSI的字符串是出现乱码的,同样在ANSI函数里也不能显示UNICODE的字符串,而是要进行相互转换才能显示正确的字符串。在NT以后的操作系统里,Windows底层函数已经全部改为UNICODE的方式,如果还是使用ANSI的话,要比UNICODE函数慢一些,系统底层会从ANSI的方式转换为UNICODE方式,然后再显示出来。从ANSI转换为UNICODE的字符串,就可以使用函数MultiByteToWideChar来实现。
函数MultiByteToWideChar声明如下:
WINBASEAPI
int
WINAPI
MultiByteToWideChar(
__in UINT CodePage,
__in DWORD dwFlags,
__in LPCSTR lpMultiByteStr,
__in int cbMultiByte,
__out_ecount_opt(cchWideChar) LPWSTRlpWideCharStr,
__in int cchWideChar);
CodePage是代码表。
dwFlags是转换标志。
lpMultiByteStr是输入ANSI字符串。
cbMultiByte是输入ANSI的字符串长度。
lpWideCharStr是输出UNICODE字符串。
cchWideChar是输出UNICODE字符串的缓冲区大小。
调用函数的例子如下:
#001//
#002//字符串转换。
#003//蔡军生2007/11/28 QQ:9073204 深圳
#004void MultiToWide(void)
#005{
#006 //ANSI的字符串。
#007 std::string strANSI("测试字符串转换/r/n");
#008
#009 //
#010 const int nBufSize = 512;
#011 TCHAR chBuf[nBufSize];
#012 ZeroMemory(chBuf,nBufSize);
#013
#014 //转换为UNICODE的字符串。
#015 if (MultiByteToWideChar(CP_ACP,0,strANSI.c_str(),strANSI.length(),
#016 chBuf,nBufSize) > 0)
#017 {
#018 //
#019 OutputDebugString(chBuf);
#020 }
#021
#022}
相关推荐
1.使用方法详解 在本文开始之处,先简要地说一下何为短...关于windows下的ASCII和UNICODE的更多信息,可以参考这两本经典著作:《windows 程序设计》,《windows 核心编程》.这两本书关于这两种字符都有比较详细的解说.
Ucs2与GB2312互换可以用VC中的WideCharToMultiByte以及MultiByteToWideChar函数。 Ucs2本身有3种格式,常用的是80格式,即80开头,每两个字节表示一个字符,还有81,82格式,后两种可以用一个字节表示一个汉字。80,...
原因在于之前版本的String默认为AnsiString,而Delphi2007之后的String默认为WideString,同样,PChar指针也就为PAnsiString,所以调用Windows API函数如:MultiByteToWideChar 会出现编译出错,原因是类型不对,也...
易语言API创建系统用户源码,API创建系统用户,创建windows用户,windows用户组设置,Unicode转Ansi,Ansi转Unicode,API_WideCharToMultiByte,API_MultiByteToWideChar
前言 ...MultiByteToWideChar函数是将多字节转换为宽字节的一个API函数,它的原型如下: int MultiByteToWideChar( UINT CodePage, // code page DWORD dwFlags, // character-type options LPCST
易语言API取图标源码,API取图标,设置信息框图标,API_GetForegroundWindow,API_ShowWindow,API_SendMessage,API_LoadIcon,API_LoadImage,API_CreateIcon
GB2312编码与utf-8编码的字符串的转换,主要使用windows api函数MultiByteToWideChar和WideCharToMultiByte,代码简洁,经测试可用
易语言API编码转换源码,API编码转换,Ansi转Unicode,Unicode转Ansi,Utf8转Unicode,Unicode转Utf8,Ansi转Utf8,Utf8转Ansi,宽字符到双字节1_,宽字符到双字节_,MultiByteToWideChar,MultiByteToWideChar1,...
易语言API判断字体是否存在源码,API判断字体是否存在,IsWinFont,EnumFonts,A2W,GetDC,ReleaseDC,EnumFontsW,MultiByteToWideChar
通过调用封装API函数WideCharToMultiByte和MultiByteToWideChar,实现ANSI/UTF-8/Unicode编码格式的相互转换。有C++和C两个版本。
易语言API更改图标源码,API更改图标,W2A,A2W,ChangeIconDialog,SHChangeIconDialog,WideCharToMultiByte,MultiByteToWideChar
pecmd-decrypt 解密 mdyblog 版 pecmd 加密的 pecmd.ini。...编写一个 dll,实现一个新的 MultiByteToWideChar 函数,在 DllMain 里面使用 detours 替换原来的函数; 编写一个加载器,使用 detours 启动 pecmd 进
。。。
。。。
易语言WINHTTP宽字符API源码,WINHTTP宽字符API,W2M,M2W,W2P,P2W,GetMultiByteSizeRequired,WideCharToMultiByte,GetWideCharSizeRequired,MultiByteToWideChar,lstrcpyn_bytes2pointer,lstrcpyn_pointer2bytes,...
http://guacamole.googlecode.com/svn-history/r454/trunk/lua/bindings/win32/init.lua
。。。
。。。
1、需要用到window的API(MultiByteToWideChar),不能跨非window系统。 2、需要用到lastpos函数,需要PB7及以上支持。 引用文章:http://blog.csdn.net/pbdesigner/archive/2006/05/25/755083.aspx