MultiByteToWideChar处理中文问题

.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
        );

假设字符串变量value存储的是一个已经乱码了的繁体中文 , 想把它正确的解码出现, 可以这样

 先得到乱码中文的长度(因为API函数需要这个参数)

int len = MultiByteToWideChar(9500, value, -1null0);

 参数cbMultiByte指定"-1"即可得到输入的value的长度

StringBuilder buffer = new StringBuilder();
MultiByteToWideChar(9500, value, -1, buffer, len);

 这样, buffer里面得到的就是正确的繁体解码的中文了

注: "950"是繁体代码页, 另, "936"是简体代码页

原文地址:https://www.cnblogs.com/LeoWong/p/2266850.html