通过Unicode传递中文,防止接收端出现乱码

来源:互联网 发布:淘宝如何设置客户权限 编辑:程序博客网 时间:2024/06/05 05:45

最近在项目中发现在C++程序中用Socket模拟http请求,发送中文字符,在接收端出现乱码。 虽然说传输过程中设置charset可以避免乱码,但是多次尝试后还是不能解决。

最后只好用Unicode码代替中文传输,在接收端再还原成中文。

C++程序中的中文又是一个C#程序发送过去的。 所以我干脆在C#程序中将中文转成16进制的Unicode代码发送过去。最终在前台JS代码接收到Unicode编码时将它还原成中文。


C#中将字符串转换成Unicode码:

public string StringToUnicode(string text)
        {
            string strUni = null;
            string temp = null;
            foreach (char c in text)
            {
                temp = string.Format("{0:x}", (int)c);
                if (temp.Length < 3)
                    temp = "00" + temp;
                strUni += "," + temp;
            }
            return strUni;
        }

js代码中接收到Unicode代码后,还原成中文:

var str = ",623f,95f4,0031,002e,002e,002e,002e,002e,002e,005f,002d,0021,0040,0023,0026,002a";       //  所有的逗号都替换成 %u
var str1 = str.replace(/\,/g, '%u');
console.log(unescape(str1));       // unescape 函数可以将Unicode编码解析成中文。必须在四位的16进制数前加上 %u



0 0