- 浏览: 589982 次
文章分类
- 全部博客 (174)
- Core Java 学习 (6)
- Hibernate 学习 (3)
- Struts 学习 (3)
- Spring 学习 (9)
- EJB 学习 (0)
- 设计模式 (0)
- Oracle 学习 (6)
- JRuby (0)
- PHP (18)
- MySql (7)
- Apache (6)
- Informix (2)
- JSTL (1)
- CSS+HTML (8)
- Ajax (2)
- javaScript (16)
- reverse Ajax (1)
- Discuz (7)
- 网站 (11)
- SEO (5)
- Linux (4)
- ecshop (1)
- 电子商务 (1)
- 文档在线浏览 (18)
- 服务器技术 (10)
- flex (17)
- 用户体验 (1)
- java (1)
- flex+blazeDS (1)
- tomcat (1)
- 开发管理 (1)
最新评论
-
niaoqq1:
真坑爹,全是中文字符,复制全部报错!
<c:forEach 详解 -
jhys7s8jd:
pdf打印机下载http://www.onlinedown.n ...
命令行下转换word文档成PDF -
海豚12315:
flashPaper读取磁盘上的文件路径,
最好是放到某个系统 ...
在线文档阅读实现的解决方案 -
八月约克:
火狐不支持这个东东
Scripting.Dictionary的使用 -
longgol:
有一问:怎么通过flashPaper读取磁盘上的文件路径呢。我 ...
在线文档阅读实现的解决方案
gb2312转换utf-8 utf-8转换gb2312 javascript urlencode解码 Hex Asc Chr
- 博客分类:
- javaScript
在我的前一篇文章里面已经实现了用javascript给urlencode解码的问题,很希望您能看下我前一篇帖子"客户端用 javascript代码解析urlencode字符串",也许那才是您想要的, 以下我搜集的帖子能给大家在其它方面带来些参考帮助,以下的都是他们自己的源代码和原话,在下不敢随意窜改,因为当时没记下你们的网址和名字,所以没粘上 去,各位兄台见谅啊
【转贴1】
javascript编码转换
随便写写, 有兴趣就看, 与.net无多大关系.
这几天无聊, 看到了"adsl密码终结者"这个软件, 嗯, 对它的功能不甚满意, 想针对我这里的写一个, 当
时考虑用C#, 不过呢, 我对网络传输这块不熟, 还是用比较熟的东西, javascript + xmlhttp, 当时在写
的时候, 可能请求的所有网页都是utf-8编码的, 代码一直运行良好, 可是在扫描到某个地址的时候, 总
是出现异常, 我搞出来一看, 原来那网页的编码是gb2312的, 以前也曾遇到过类似的问题, 不过, 那时候
的解决办法同得用ado.record对像吧, 现在浏览器创建这对象却失败, 只能另外想办法, google有一通以
后, 找到这几个函数,
LEADBBS CODE
//将收到的gb2312编码转换成对应的文字
function gb2utf8(data)
{
var glbEncode = [];
gb2utf8_data = data;
execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript");
var t =
escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace
(/%([A-Z].)%(.{2})/g,"@$1$2");
t = t.split("@");
var i = 0, j = t.length, k;
while( ++i < j )
{
k = t[i].substring(0,4);
if(!glbEncode[k])
{
gb2utf8_char = eval("0x"+k);
execScript("gb2utf8_char = Chr(gb2utf8_char)", "VBScript");
glbEncode[k] = escape(gb2utf8_char).substring(1,6);
}
t[i] = glbEncode[k]+t[i].substring(4);
}
gb2utf8_data = gb2utf8_char = null;
return unescape(t.join("%"));
}
//对文字进行utf-8编码
function utf8(wide)
{
var c, s;
var enc = "";
var i = 0;
while(i<wide.length)
{
c= wide.charCodeAt(i++);
// handle UTF-16 surrogates
if (c>=0xDC00 && c<0xE000) continue;
if (c>=0xD800 && c<0xDC00)
{
if (i>=wide.length) continue;
s= wide.charCodeAt(i++);
if (s<0xDC00 || c>=0xDE00) continue;
c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
}
// output value
if (c<0x80)
enc += String.fromCharCode(c);
else if (c<0x800)
enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
else if (c<0x10000)
enc +=
String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
else
enc +=
String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+
(c&0x3F));
}
return enc;
}
var hexchars = "0123456789ABCDEF";
function toHex(n)
{
return hexchars.charAt(n>>4)+hexchars.charAt(n & 0xF);
}
var okURIchars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
function encodeURIComponentNew(s)
{
var s = utf8(s);
var c;
var enc = "";
for(var i= 0; i < s.length; i++)
{
if(okURIchars.indexOf(s.charAt(i))==-1)
enc += "%"+toHex(s.charCodeAt(i));
else
enc += s.charAt(i);
}
return enc;
}
这两个函数呢, 我花了点时间, 才看懂, 这两个也是网上较为常见的, 但我后来考虑到, 如果我要发送
gb2312编码数据怎么办? 于是, 疯狂的搜索, 功夫不负有心人, 被我找到两个函数, 他奶奶的却是
vbscript版的, 并且作者也是没有办法, 才用vbscript写的, 呵呵, 这个么, 没办法, 我非常不喜欢
vbscript的语法, 决定还是改写成javascript的, 但在几个位置, 不得不承认, vbscript稍微强一点.
LEADBBS CODE
//转化成十六进制, 调用的是vbscript的Hex函数
function Hex(n)
{
c = n;
execScript("c = Hex(c)", "vbscript");
return c;
}
//返回文字的AscaII编码, 调用的是vbscript的Asc函数
function Asc(s)
{
c = s;
execScript("c = Asc(c)", "vbscript");
return c;
}
//获取文字的gb2312编码
function gb2312Encode(str)
{
var string = "";
c = s = "";
var high = "";
var low = "";
for(var i = 0; i < str.length; i++)
{
c = Asc(str.charAt(i));
if(Math.abs(c) < 0xFF)
string += str.charAt(i);
else
{
if(c < 0) c += 0x10000;
high = ((c & 0xFF00) >> 8) & 0x00FF;
low = c & 0xFF;
string += "%" + Hex(high) + "%" + Hex(low);
}
}
return string;
}
//将收到的gb2312编码进行解码
function gb2312Decode(data)
{
string = "";
str = "";
d = data;
n = "";
c = "";
execScript("l = LenB(d)", "vbscript");
execScript("d = MidB(d, 1)", "vbscript");
for( i = 1; i <= l; i++)
{
execScript("c = AscB(MidB(d, i, 1))", "vbscript");
if( c < 0x80)
{
execScript("str = Chr(c)", "vbscript");
string += str;
}
else
{
execScript("n = AscB(MidB(d, i + 1, 1))", "vbscript");
execScript("str = Chr(CLng(c) * &H100 + CInt(n))", "vbscript");
string += str;
i = i + 1;
}
}
return string;
}
这个算是部份原创吧, 相信这两个函数的javascript版本, 不是太多, 反正我是没找到, 也许就我这一家
. 嗯, 如果想知道这些函数怎么工作的, 请去了解gb2312是怎么编码, 还有utf-8是怎么对unicode字符进
行编码.
【转贴2】
(注:以下代码或许是你搜索过程经常找得到的,但是很遗憾,不一定给你带来什么实质性的进展,其中的vbs代码你可以找一种方式代替,写到 javascript里面,就像上一个帖子里面的那样用execScript函数)
< script language="vbscript">
Function str2asc(strstr)
str2asc = hex(asc(strstr))
End Function
Function asc2str(ascasc)
asc2str = chr(ascasc)
End Function
</script>
<script language="javascript">
/*这里开始时UrlEncode和UrlDecode函数*/
function UrlEncode(str){
var ret="";
var strSpecial="!\"#$%&'()*+,/:;<=>?[]^`{|}~%";
for(var i=0;i<str.length;i++){
var chr = str.charAt(i);
var c=str2asc(chr);
tt += chr+":"+c+"n";
if(parseInt("0x"+c) > 0x7f){
ret+="%"+c.slice(0,2)+"%"+c.slice(-2);
}else{
if(chr==" ")
ret+="+";
else if(strSpecial.indexOf(chr)!=-1)
ret+="%"+c.toString(16);
else
ret+=chr;
}
}
return ret;
}
function UrlDecode(str){
var ret="";
for(var i=0;i<str.length;i++){
var chr = str.charAt(i);
if(chr == "+"){
ret+=" ";
}else if(chr=="%"){
var asc = str.substring(i+1,i+3);
if(parseInt("0x"+asc)>0x7f){
ret+=asc2str(parseInt("0x"+asc+str.substring(i+4,i+6)));
i+=5;
}else{
ret+=asc2str(parseInt("0x"+asc));
i+=2;
}
}else{
ret+= chr;
}
}
return ret;
}
alert(UrlDecode("%C2%D2%C2%EB"));
< /script>
发表评论
-
JS中对象中的公有方法、私有方法、特权方法
2012-05-26 18:25 4747了解如何创建一个对象的时候,我们就需要给这个对象增加方法 ... -
注意细节:Javascript中的变量作用域
2012-05-21 03:04 914先看一下这段Javascript脚本代码: 1< ... -
关于javascript的apply和call函数
2012-05-21 00:05 953答案网 1、关于javascript的apply和call函 ... -
JavaScript中对象的构造方法
2012-03-07 13:03 985第一种方式: 工厂方法 能创建并返回特定类型的对象的工厂 ... -
函数中定义 var self = this 的作用
2011-12-21 16:19 3444function Class1(){ ... -
ie6下的js调试工具companion.js
2010-12-03 15:28 1470做web开发的朋友都清楚,js程序的调试是相当郁闷的,因为 ... -
avascript判断浏览器和操作系统类型
2009-11-07 00:35 836var ua = navigator.userAgent. ... -
JS eval()函数
2009-08-27 23:30 1534eval()函数 Jav ... -
几种js方法调用
2009-08-25 23:35 924// 第一种var i = function() { re ... -
js计算字符个数,包括中文
2009-07-14 09:55 3903<SCRIPT language="JavaS ... -
揭开正则表达式的神秘面纱
2009-03-25 14:16 960引言 正则表达式(regular expres ... -
js判断浏览器版本
2009-02-07 17:19 1360function getIEVersion() { i ... -
JS获取表格单元格
2009-02-04 21:00 2465var ccell = document.getE ... -
javascript---window.location和window.open
2008-11-20 18:57 4409window.open 用来打开新窗口 window.loca ... -
setInterval()、setTimeout()的区别与停止
2008-11-20 18:26 1572区别:setTimeout(表达式,延时时间);//只执行一次 ...
相关推荐
标题 "URL GB2312 UTF-8编解码.zip" 涉及的主要知识点是字符编码和URL编码,特别是GB2312与UTF-8这两种编码方式在URL中的应用。URL(Uniform Resource Locator)是互联网上的资源定位符,为了在网络上传输,URL中的...
在本案例中,我们有一个名为"gb2312和utf-8文件编码互换工具 v1.05-ASP源码.zip"的压缩包,它包含了一款ASP源码,可以实现gb2312与utf-8编码之间的转换。 首先,让我们了解一下gb2312和utf-8编码。GB2312,全称...
同样地,我们也需要实现从UTF-8编码的URL中解码并转换回Gb2312编码的过程: ```vb Function UrlDecode_GBToUtf8(ByVal str) Dim B, ub Dim UtfB, UtfB1, UtfB2, UtfB3 Dim i, n, s n = 0 ub = 0 For i = 1 To...
在标题和描述中提到的问题,即如何将字符串转换为GB2312或UTF-8编码以便在URL中安全地传递中文参数。下面将详细介绍这个过程,并给出提供的代码实现。 首先,我们需要理解GB2312和UTF-8两种编码方式。GB2312是中国...
在ASP(Active Server Pages)环境中,有时我们需要将GB2312编码的字符串或文件转换为UTF-8编码,以便在多语言环境下兼容性更强。本篇将详细介绍ASP中GB2312转UTF-8的原理和方法。 GB2312是中国大陆广泛使用的简体...
总结,要在Delphi中完成“UTF-8转码HTTPEncode”的操作,你需要先将UTF-8字符串转换为Unicode字符串,然后使用`UrlEncode`函数进行HTTPEncode编码。这个过程对于处理HTTP请求中的参数或URL路径非常重要,可以避免...
在JavaScript中,编码转换是一个常见的任务,特别是在处理中文字符时,因为不同的编码标准如UTF-8和GB2312可能会导致乱码问题。这里,我们有两个函数:`UrlEncode` 和 `getSpell`,它们用于将UTF8编码的字符串转换为...
在压缩包内的文件名称列表中,我们可以推测这些可能是VB代码文件或者示例,分别对应了UTF-8和GB2312的编码转换功能。用户可以通过查看这些文件了解如何在VB中实现这两种编码转换操作,包括导入相关库、调用函数以及...
WysiwygPro是一个WEB可视化编辑器,可用于Joomla、Drupal等CMS系统,当然也可简单修改用于其它WEB程序 汉化修正除了需要实现GB2312-UTF-8间的转换,还要实现UTF-8- urlencode码间的转换
4. **数据输入和输出处理**:在插入或查询数据时,确保所有数据经过正确的编码转换,例如,使用`Server.URLEncode`和`Server.URLDecode`函数对URL中的参数进行编码和解码。 5. **测试和调试**:创建一个简单的ASP...
这个方法先将非数组值从GBK编码转换为UTF-8,然后再使用`urlencode`进行URL编码,以避免乱码。 4. **递归处理数组** 另一个方法是递归地处理整个数组,确保所有的键和值都经过正确的编码转换: ```php function...
这个函数首先对字符串进行urlencode转换,然后将所有的“%”字符替换为“=”号。随后,如果出现连续超过73个非换行和非等号的字符,就在后面加上一个“=\r\n”。这个简单的实现方法基本上遵循了Quoted-printable编码...
标题和描述中提到的"可以把编码转换成 gb2312编码lib.UTF8toGB2312.js"是一个JavaScript库,主要用于将UTF-8编码的字符串转换为GB2312编码。GB2312是中国大陆广泛使用的简体中文字符集,包含了6763个常用汉字。在...
直接打包省掉 很多麻烦 开包及用 编码 var s = $url.ecode(m); 解码 var m = $url.ecode(s);
使用这个库可以很方便的编码解码URLCode。里面带了ESP8266看门狗开关,可以在调用这个库之前宏定义ESP8266就可以开启库的看门狗设置。避免触发看门狗。建议配合我主页的教程一起食用。哪怕是小白也可以轻松使用。
然而,在网络传输和处理中,由于GB2312不支持Unicode,可能会遇到兼容性问题,因此在现代Web开发中更常使用UTF-8编码。 在"mailto:"链接中使用汉字编码是一个常见的需求。"mailto:"是HTML中的一个特殊链接类型,...
在网站开发过程中,使用汉字传输会导致有时URL会出现乱码的问题,可通过urlencode对中文进行编码,然后再解码,避免出现乱码,此函数加密的字符串可通过php的urldecode进行解码