应该使用哪些charsets进行url编码

时间:2015-03-26 10:42:49

标签: java urlencode url-encoding

我需要对URL组件进行编码。 url组件可以包含特殊字符,如"?,#,="还有汉语的特点。

我应该使用哪种字符集UTF-8,UTF-16或UTF-32?为什么?

5 个答案:

答案 0 :(得分:4)

我想你的意思是这里的编码百分比。

RFC 3986, section 2.5对此很清楚(强调我的):

  

当新的URI方案定义表示文本的组件时      数据由通用字符集[UCS]中的字符组成,      根据UTF-8,数据应首先编码为八位字节      字符编码[STD63] ;然后只有那些没有的八位字节      对应于未保留集中的字符应为百分比 -      编码。例如,字符A将表示为" A",      将代表拉丁文大写字母A WITH GRAVE      as"%C3%80"以及角色KATAKANA LETTER A将被代表      as"%E3%82%A2"。

因此,这应该是UTF-8。

另外,要小心URLEncoder.encode();虽然反复重复推荐,但事实是它不适合URI编码;引用类本身的javadoc:

  

此类包含用于将String 转换为application / x-www-form-urlencoded MIME格式的静态方法

不是 URI编码使用的内容。 (如果您想知道,application/x-www-form-urlencoded是HTTP POST数据中使用的内容)您要使用的是URI模板。例如,请参阅here

答案 1 :(得分:1)

从HTML角度来看的引用。

HTML4规范,Non-ASCII characters in URI attribute values部分,陈述(我的重点):

  

我们建议用户代理采用以下约定   在这种情况下处理非ASCII字符:

     
      
  1. UTF-8 中的每个字符(请参阅[RFC2279])表示为一个或多个字节。
  2.   
  3. 使用URI转义机制转义这些字节(即,将每个字节转换为%HH,其中HH是十六进制表示法   字节值)。
  4.   

类似地,在HTML5规范中,Selecting a form submission encoding section基本上表示如果未指定accept-charset属性,则应使用 UTF-8

另一方面,我没有发现任何状态UTF-8 必须使用。 某些较旧的软件特别使用iso-8859-1 。例如,版本8之前的Apache Tomcat将iso-8859-1作为其URIEncoding设置的默认值。

答案 2 :(得分:0)

UTF-8(Unicode)是HTML5中的默认字符编码,因为它几乎包含所有符号/字符。

答案 3 :(得分:0)

转到UTF-8,你也可以实现同样的目标 URLEncoder.encode(string, encoding)

另外,你可以参考 This blog,它试图对“维也纳恩斯特哈佩尔球场”这样的汉字进行编码

答案 4 :(得分:-1)

对您的网址进行编码以转义特殊字符。有几个网站可以为您做到这一点。 例如。 http://www.url-encode-decode.com/