.NET里面, 处理中文乱码经常是个头痛的问题, Windows API函数MultiByteToWideChar在处理这方面的问题给予了很好的支持
[DllImport("kernel32.dll")]
public extern static int MultiByteToWideChar(
uint codePage, //Code Page
uint dwFlags, //Switch Flags
string multiByteStr, //Input ANSI String
int cbMultiByte, //Input ANSI String Length
[Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpWideCharStr, //Output UNICODE String
int cchWideChar//Output UNICODE String Buffer Size
);
public extern static int MultiByteToWideChar(
uint codePage, //Code Page
uint dwFlags, //Switch Flags
string multiByteStr, //Input ANSI String
int cbMultiByte, //Input ANSI String Length
[Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpWideCharStr, //Output UNICODE String
int cchWideChar//Output UNICODE String Buffer Size
);
假设字符串变量value存储的是一个已经乱码了的繁体中文 , 想把它正确的解码出现, 可以这样
先得到乱码中文的长度(因为API函数需要这个参数)
int len = MultiByteToWideChar(950, 0, value, -1, null, 0);
参数cbMultiByte指定"-1"即可得到输入的value的长度
StringBuilder buffer = new StringBuilder();
MultiByteToWideChar(950, 0, value, -1, buffer, len);
MultiByteToWideChar(950, 0, value, -1, buffer, len);
这样, buffer里面得到的就是正确的繁体解码的中文了
注: "950"是繁体代码页, 另, "936"是简体代码页