javascript如何实现gbk编码
今天小编给大家分享一下javascript如何实现gbk编码的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
javascript实现gbk编码的方法:1、在js建立一个“字符->gbk码”的映射表,通过查表来解决;2、使用escapeDBC和encodeURIComponent进行编码。
本文操作环境:Windows7系统、javascript1.8.5版、Dell G3电脑。
javascript 怎么实现gbk编码?
Javascript对中文GBK编码
今天帮同事弄一个在迅雷新闻上展示的页面,里面的搜索功能对关键词用的是GBK编码,而他们给我的页面上GB2312的,造成搜索功能的关键词乱码。后面google了一下,找到了解决方案,很有效。
以”超级本“这个关键词为例:
GB2312下编码后为%E8%B6%85%E7%BA%A7%E6%9C
GBK下编码后为%B3%AC%BC%B6%B1%BE
在 js 中要怎样实现使用gbk集进行 uri 编码呢
%HH 其实就只是把一个字节值转换成2位16进制数字,再在前头加上 % 而己
问题是 js 中没有函数可以支持取得字符的 gbk 编码值 str.charCodeAt(index) 取得的是 unicode 编码值。
现在在网上流行的一种解决方案就是,在 js 建立一个 “字符->gbk码” 的映射表,通过查表来解决
因为字符多,这使得 js 雍肿了不少,而且在网上找到的这些映射表建的是不是全面,很难说。
其实在 ie 中,我们可以借助 VBScript 来支持这个工作。
VBScript 中: (Asc(“盟”) + 65536) Mod 65536 就可以取得字符 “盟” 的 GBK 码 50123
但是其它浏览器不支持 VBScript ,可怎么办?
有这么一个办法:
在页面中插入一个图片 img, 设置 img.class="lazy" data-src = “…中文…”; 这个时候,浏览器会自动把这个 class="lazy" data-src 的值进行 uri 编码
而它是使用 gbk 还是 utf8 ,是根据文档编码来决定的.
这时候,我们就可以好好利用一下这个特性:
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<script type="text/javascript">
function encodeURL(s) {
var img = document.createElement("img");
// escapeDBC 对多字节字符编码的函数
function escapeDBC(s) {
if (!s) return ""
if (window.ActiveXObject) {
// 如果是 ie, 使用 vbscript
execScript(‘SetLocale "zh-cn"’, ‘vbscript’);
return s.replace(/[\d\D]/g, function($0) {
window.vbsval = "";
execScript(‘window.vbsval=Hex(Asc("’ + $0 + ‘"))’, "vbscript");
return "%" + window.vbsval.slice(0,2) + "%" + window.vbsval.slice(-2);
});
}
// 其它浏览器利用浏览器对请求地址自动编码的特性
img.class="lazy" data-src = "nothing.action?separator=" + s;
return img.class="lazy" data-src.split("?separator=").pop();
}
// 把 多字节字符 与 单字节字符 分开,分别使用 escapeDBC 和 encodeURIComponent 进行编码
return s.replace(/([^\x00-\xff]+)|([\x00-\xff]+)/g, function($0, $1, $2) {
return escapeDBC($1) + encodeURIComponent($2||”);
});
}
alert(encodeURL("中文"));
</script>
以上就是“javascript如何实现gbk编码”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341