博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript和C#通用gb2312和utf8编码解码函数简单实现
阅读量:7107 次
发布时间:2019-06-28

本文共 2808 字,大约阅读时间需要 9 分钟。

1、javascript实现gb2312编码解码

随便看到一段话如下:

“老赵的jscex   曲线助赵拿WP7,哇哈哈”

老赵你可能已经如雷贯耳了,但没听说过或者还不懂什么是,不知道有已经在使用它讨论它,或者不知道它能出来……充满求知欲望的你习惯性地打开浏览器进行搜索,这时候客户端应该选择什么方式的编码传参呢?

我们知道,javascript默认编码函数有三种,即escape,encodeURIencodeURIComponent(可参考),其中encodeURI和encodeURIComponent默认都是使用utf8编码,而且它们的使用方式中没有C#那种直接指定某种编码形式的调用。但是在一些应用场景比如网站全文检索中我们又需要使用客户端gb2312编码,这一点大家可以参考对比和的不同编码方式,百度号称最懂中文,经试验,它对搜索关键字确实就是通过gb2312方式编码的。

如何实现客户端gb2312编码?javascript没有现成的函数可用,天生不是干这种没质量的活的,ajax调用服务端实现编码又有点迂回且浪费。所以理所当然不得不自己写一个,还好网上早就有人实现了。这里整理贴出一个经常使用的javascript的客户端gb2312编码和解码的函数,希望对您有用(代码有点长,打开须谨慎):

encodetogb2312.js

 

简单调用形式如下:

1
2
3
4
var 
str =
"学习老赵的jscex,哇哈哈..."
;
var 
strEncoded = encodeToGb2312(str);
//gb2312编码
alert(strEncoded);
alert(decodeFromGb2312(strEncoded));
//gb2312解码

比较遗憾的地方是对中文标点支持不够,直到目前依然还没有完全解决中文标点客户端编码解码问题。

 

2、客户端javascript实现通用utf8和gb2312编码解码

有了gb2312的编码和解码方法,我们可以整理javascript的其他几个编码解码方法,进行统一调用:

powerencodejs

调用形式如下:

1
2
3
4
5
6
7
8
9
var 
str =
"学习老赵的jscex,哇哈哈..."
;
 
var 
strEncoded = PowerEncode(str, encodeType.Gb2312);
//gb2312编码
 
alert(strEncoded);
 
var 
strDecode = PowerDecode(strEncoded, decodeType.Gb2312);
//gb2312解码
 
alert(strDecode);

你可能会说,上面的封装一点必要没有,从功能上确实是的。但是,如果一个团队中不同开发者调用js编码解码的时候能够统一接口,那碰到需要解决网页中编码解码问题的时候,我们是不是就不用一行一行去找到底用了哪种js编码解码函数,解决问题是不是会轻松很多呢?老赵大牛教导过我们写代码要“不优雅不舒服斯基”,这种完美主义甚至有点“强迫症”的倾向是不是也值得我们好好学习一下呢?

 

3、服务端c#实现utf8和gb2312编码解码

服务端处理编码解码相对容易,类库也丰富的多,下面简单写个方法贴上来结束本文了:

powerencode

直接调用如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
protected 
void 
Page_Load(
object 
sender, EventArgs e)
{
    
var 
str =
"老赵的jscex 曲线助赵,哇哈哈"
;
    
var 
strEncode = PowerEncode(str, EncodeType.Escape);
    
Response.Write(
"Escape:" 
+ strEncode);
    
Response.Write(
"<br/>"
);
    
var 
strDecode = PowerDecode(strEncode, DecodeType.Unescape);
    
Response.Write(
"Unescape:" 
+ strDecode);
    
Response.Write(
"<br/>"
);
    
strEncode = PowerEncode(str, EncodeType.EncodeURI);
    
Response.Write(
"EncodeURI:" 
+ strEncode);
    
Response.Write(
"<br/>"
);
    
strDecode = PowerDecode(strEncode, DecodeType.DecodeURI);
    
Response.Write(
"DecodeURI:" 
+ strDecode);
    
Response.Write(
"<br/>"
);
    
strEncode = PowerEncode(str, EncodeType.EncodeURIComponent);
    
Response.Write(
"EncodeURIComponent:" 
+ strEncode);
    
Response.Write(
"<br/>"
);
    
strDecode = PowerDecode(strEncode, DecodeType.DecodeURIComponent);
    
Response.Write(
"DecodeURIComponent:" 
+ strDecode);
    
Response.Write(
"<br/>"
);
    
strEncode = PowerEncode(str, EncodeType.Gb2312);
    
Response.Write(
"Gb2312:" 
+ strEncode);
    
Response.Write(
"<br/>"
);
    
strDecode = PowerDecode(strEncode, DecodeType.Gb2312);
    
Response.Write(
"Gb2312:" 
+ strDecode);
}

上面这种方法是直接引用Microsoft.JScript;命名空间利用js语法进行javascript的对应编码和解码,除了gb2312编码解码外,不用再区分HttpUtility还是Server对象的编解码的异同,简单直接有效。当然,上面方法写得比较随意,实际开发中我们完全可以写成字符串的扩展方法进行调用。

本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2011/12/24/2300549.html,如需转载请自行联系原作者
你可能感兴趣的文章
ASP.NET免费服务器~支持MVC和Net4.5
查看>>
StackOverflow发布年度开发者调查报告:JavaScript备受欢迎
查看>>
自平衡二叉查找树
查看>>
shell脚本中的数据传递方式
查看>>
Shiro系列(0) - 权限管理在J2EE企业级开发中的应用与实战
查看>>
Oracle Goldengate REPLICAT启动时报正在运行解决办法
查看>>
Gdevops峰会归来
查看>>
[20170215]ORA-00088与DG Gap监测与解决4
查看>>
Hadoop Pig学习笔记(一) 各种SQL在PIG中实现
查看>>
充分挖掘大数据资源“富矿”
查看>>
oerr的用法
查看>>
解决GPG签名验证错误
查看>>
不属于自己的就忘掉吧,不要留恋,就当着是回忆吧…!
查看>>
文化衫、毕业纪念衫选用什么方式印刷合适?
查看>>
Spark亚太研究院决胜大数据时代100期公益大讲堂
查看>>
删除多target工程
查看>>
NSRunLoop详解
查看>>
[From Microsoft] Using command redirection oper...
查看>>
C++11新特性:std::move()和std::forward()
查看>>
springMVC+jpa配置之简单案例
查看>>