如今开放平台大行其道,但凡是个网站,都竞相推出自己的开放平台,有开放平台就必然有开放API,而RESTful风格的API非常普遍。调用这些API几乎总是需要对参数值进行urlencode编码。对于中文参数值,有些网站需要以UTF-8编码,有些需要以GBK编码(这是两种最常见的中文编码,当然也可能是其它编码方案)。开发mashup应用时,这是需要处理的普遍问题。 在Java中,可以使用URLEncoder.encode(str, “UTF-8″) 或 URLEncoder.encode(str, “GBK”)来实现上述的编码转换。 在javascript中,进行urlencode有3个函数:escape; encodeURI; encodeURIComponent。对于中文字符,第一个函数是将字符的Unicode内码转换成16进制,在前面添加%u。后两个函数都是以UTF-8方式编码汉字。要想以GBK方式编码汉字,javascript并没有提供语言级的支持(毕竟javascript的作者不是中国人)。在前一篇博客所述的编写划词翻译插件时,我就遇到了这种困难。从网上查找良久,包括翻看一些流行的javascript框架类库,我也没有找到能直接使用的以GBK方式编码汉字的方法。作程序员的一大好处是,如果市面上没有满足我需求的某个工具或功能,我可以选择自己编写一个,而不必等到有人把它写出来。 javascript内部是使用Unicode码的,要想以GBK方式对汉字进行urlencode,第一步要做的就是将字符的Unicode内码转换为GBK内码,然后逐字节转为16进制即可。由于汉字的Unicode内码和GBK内码之间并不存在简单的线性映射关系,所以,要在同一字符的两种内码间转换,最简捷的方式就是做一个映射表,然后直接查表就行了,而映射表很容易就可以得到。参考了此处的方法,我用javascript实现了这么一个转换模块,也提供了一个encodeURIGBK函数,该函数和Java的URLEncoder.encode(str, “GBK”)基本等价。 以下是示例: var str = ‘你好’; var a = encodeURIComponent(str); // a => ‘%E4%BD%A0%E5%A5%BD’ var b = encodeURIGBK(str); // b => ‘%C4%E3%BA%C3′ 代码在这里,希望对你有用(由于映射表的存在,体积有470K+,稍微大了点…)。
最新评论