Another Java Geek

其实我不是geek,我和你一样,我是凡客

正在浏览 Web 里的文章

如今开放平台大行其道,但凡是个网站,都竞相推出自己的开放平台,有开放平台就必然有开放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+,稍微大了点…)。

前不久,一个偶然的机会见到<input type=”search” />这样的HTML标签,抱持着对HTML的过往的经验(此前我对HTML的大部分知识是基于HTML4.01及XHTML1.0的),我开始怀疑这个标签有问题。input标签的那几个type属性值早就烂熟于心了,诸如:text/password/radio/checkbox/submit/reset/button/file/image/hidden,这个search从何而来呢?茫然之间google,才得知这是HTML5中新增的元素,代表一个搜索框。以往搜索引擎的搜索框都是用text代替的,如今特别为此增加一个search,两者的数据类型都是单行文本,初看起来也没什么不同之处。不过既然人家规范中有了,应该会有它的用处,也许以后搜索引擎的“搜索建议”功能就可以通过这个控件原生支持了,不必为此写大量繁杂的跨浏览器的Ajax代码了。 除了search,HTML5还为input增加了另外一些类型: input type=datetime – global date-and-time input control input type=datetime-local – local date-and-time input control input type=date – date input control input type=month – year-and-month input control input type=time – time input control input type=week – year-and-week input control input type=number – number input control input type=range – imprecise number-input control input [...]