我需要对URL组件进行编码。 url组件可以包含特殊字符,如"?,#,="还有汉语的特点。
我应该使用哪种字符集UTF-8,UTF-16或UTF-32?为什么?
答案 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字符:
- 将 UTF-8 中的每个字符(请参阅[RFC2279])表示为一个或多个字节。
- 使用URI转义机制转义这些字节(即,将每个字节转换为%HH,其中HH是十六进制表示法 字节值)。
醇>
类似地,在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/