时间:2021-07-01 10:21:17 帮助过:43人阅读
function encodeToGb2312(str){ var strOut=""; for(var i = 0; i < str.length; i++){ var c = str.charAt(i); var code = str.charCodeAt(i); if(c==" ") strOut +="+"; else if(code >= 19968 && code <= 40869){ index = code - 19968; strOut += "%" + z.substr(index*4,2) + "%" + z.substr(index*4+2,2); } else{ strOut += "%" + str.charCodeAt(i).toString(16); } } return strOut; } function decodeFromGb2312(str){ var strOut = ''; for (var i=0;i<str.length; i++){ var c = str.charAt(i); // +是空格 if (c == '+'){ strOut += ' '; } // a,b,c,1,2等,非%开头的,直接返回本身 else if (c != '%'){ strOut += c; } // %开头 else{ i++; var nextC = str.charAt(i); // 数字,则不是汉字 if (!isNaN(parseInt(nextC))){ i++; strOut += decodeURIComponent(c+nextC+str.charAt(i)); } else{ var x = new String(); try { var code = str.substr(i,2)+str.substr(i+3,2); i = i + 4; var index = -1; while ((index = z.indexOf(code,index+1)) != -1){ if (index%4 == 0){ strOut += String.fromCharCode(index/4+19968); break; } } }catch(e){} } } } return strOut; } var z='{0}';
(这里没考虑中文标点,主要是看unicode里中文标点和日韩的标点混在一起,分布在几个地方,就懒得弄了。谁弄了可以发我一份,谢了。)
最后用.NET生成z处的代码:
代码
StringBuilder sb = new StringBuilder(); string strFormat = @"...z = '"; // 前面的js代码 const int MinHanzi = 19968; const int MaxHanzi = 40869; for (int i = MinHanzi; i < MaxHanzi + 1; i++) { byte[] bytes = Encoding.GetEncoding("gb2312").GetBytes(((char)i).ToString()); sb.AppendFormat("{0}{1}", Convert.ToString(bytes[0], 16).ToUpper(), Convert.ToString(bytes[1], 16).ToUpper()); } string str = strFormat + sb.ToString(0, sb.Length - 1) + "';"; System.IO.File.WriteAllText(@"F:\encodeGb2312.js", str, Encoding.ASCII);
更多js下用gb2312编码解码实现方法相关文章请关注PHP中文网!