CP_ACP 936 为简体中文(可以通过 GetACP() 函数获取当前系统语言,若为简体中国则为 936,它其实就是 LCID)
CodePage 为0则获取系统当前默认的 CodePage(字符集)
[DllImport("kernel32.dll")]
static extern int MultiByteToWideChar(int CodePage, int dwFlags, string lpMultiByteStr, int cchMultiByte, byte[] lpWideCharStr, int cchWideChar);
[DllImport("kernel32.dll")]
static extern int MultiByteToWideChar(int CodePage, int dwFlags, byte[] lpMultiByteStr, int cchMultiByte, byte[] lpWideCharStr, int cchWideChar);
[DllImport("kernel32.dll")]
static extern int WideCharToMultiByte(int CodePage, int dwFlags, byte[] lpWideCharStr, int cchWideChar, byte[] lpMultiByteStr, int cchMultiByte, int lpDefaultChar, int lpUsedDefaultChar);
public const int CP_ACP = 936, CP_UTF8 = 65001;
public static byte[] A2W(string context)
{
var len = MultiByteToWideChar(CP_ACP, 0, context, -1, null, 0) * 2;
var buffer = new byte[len];
MultiByteToWideChar(CP_ACP, 0, context, -1, buffer, len);
return buffer;
}
public static string W2A(byte[] context)
{
var len = context.Length / 2;
len = WideCharToMultiByte(CP_ACP, 0, context, len, null, 0, 0, 0);
var buffer = new byte[len];
WideCharToMultiByte(CP_ACP, 0, context, -1, buffer, len, 0, 0);
return Encoding.Default.GetString(buffer);
}
public static byte[] UnicodeToUtf8(byte[] context)
{
var len = context.Length / 2;
len = WideCharToMultiByte(CP_UTF8, 0, context, len, null, 0, 0, 0);
var buffer = new byte[len];
WideCharToMultiByte(CP_UTF8, 0, context, -1, buffer, len, 0, 0);
return buffer;
}
public static byte[] Utf8ToUnicode(byte[] context)
{
var len = context.Length;
len = MultiByteToWideChar(CP_UTF8, 0, context, len, null, 0) * 2;
var buffer = new byte[len];
MultiByteToWideChar(CP_UTF8, 0, context, len, buffer, len);
return buffer;
}