WINDOWS 中 UNICODE的转换

来源:互联网 发布:java sql防注入 编辑:程序博客网 时间:2024/06/05 08:06
#include "Windows.h"
需要引用该头文件,使用 WCHAR、MultiByteToWideChar、WideCharToMultiByte

编码知识:Windows中ANSI编码为本地默认编码,中文为GBK/GB2312,网络传输和LINUX等之中为UTF-8。
UNICODE为当前最通用的一个编码集,UTF-8为表示该编码集的一种方式。所以字符串转换编码时都通过UNICODE为中间编码进行转换。

WINDOWS系统编码:
ANSI :为GBK(GB2312)编码。
WCHAR : 为UNICODE编码

代码页变量:指定执行转换的字符集,这个参数可以为系统已安装或有效的任何字符集所给定的值。
CP_ACP:ANSI字符集。 CP_MACCP:Macintosh代码页。 CP_OEMCP:OEM代码页。
CP_SYMBOL:符号字符集(42)。 CP_THREAD_ACP:当前线程ANSI代码页。
CP_UTF7:使用UTF-7转换。 CP_UTF8:使用UTF-8转换。

int MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cchMultiByte, LPWSTR lpWideCharStr, int cchWideChar);
参数说明:
CodePage :表示当前为选择该编码集与UNICODE互相转换。
dwFlags : 表示对转换进行额外控制,一般为0
lpMultiByteStr : 指向被转换的多字节字符串
cchMultiByte : 指定由参数 lpMultiByteStr 指向的字符串中字节的个数。如果lpMultiByteStr指定的字符串以空字符终止,可以设置为-1(如果字符串不是以空字符中止,设置为-1可能失败,可能成功),此参数设置为0函数将失败。
lpWideCharStr :指向接收被转换字符串的缓冲区。
cchWideChar :指定由参数lpWideCharStr指向的缓冲区的宽字符个数。若此值为零,函数返回缓冲区所必需的宽字符数,在这种情况下,lpWideCharStr中的缓冲区不被使用。

int WideCharToMultiByte( UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr, int cchMultiByte, LPCSTR lpDefaultChar, LPBOOL pfUsedDefaultChar);

参数说明:
CodePage :表示当前为选择该编码集与UNICODE互相转换。
dwFlags : 表示对转换进行额外控制,一般为0
lpWideCharStr :指向将被转换的unicode字符串。
cchWideChar :指定由参数lpWideCharStr指向的缓冲区的字符个数。如果这个值为-1,字符串将被设定为以NULL为结束符的字符串,并且自动计算长度。
lpMultiByteStr :指向接收被转换字符串的缓冲区。
cchMultiByte :指定由参数lpMultiByteStr指向的缓冲区最大值(用字节来计量)。若此值为零,函数返回lpMultiByteStr指向的目标缓冲区所必需的字节数,在这种情况下,lpMultiByteStr参数通常为NULL。

返回值:
如果函数运行成功,并且cchWideChar不为零,返回值是由lpWideCharStr指向的缓冲区中写入的宽字符数;如果函数运行成功,并且cchWideChar为零,返回值是接收到待转换字符串的缓冲区所需求的宽字符数大小。如果函数运行失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。它可以返回下面所列错误代码:
ERROR_INSUFFICIENT_BUFFER;ERROR_INVALID_FLAGS;
ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。
0 0
原创粉丝点击