我需要对URL组件进行编码。URL组件可能包含特殊字符,例如“?”,“#”,“=”以及中文字符。
我应该使用哪个字符集:UTF-8、UTF-16还是UTF-32?为什么?
从HTML角度来看的参考。
HTML4规范,第B.2.1节,说明(我加粗了):
我们建议用户代理采用以下约定来处理这种情况中的非ASCII字符:
- 将UTF-8(见[RFC2279])中的每个字符表示为一个或多个字节。
- 使用URI转义机制对这些字节进行转义(即,将每个字节转换为%HH,其中HH是字节值的十六进制表示)。
同样,在HTML5规范中,选择表单提交编码部分基本上表示,如果未指定accept-charset
属性,则应使用UTF-8。
另一方面,我没有发现规定必须使用UTF-8。 一些较旧的软件特别使用iso-8859-1。例如,Apache Tomcat在8版之前将iso-8859-1作为其URIEncoding
设置的默认值。
UTF-8(Unicode)是HTML5中的默认字符编码,因为它包含几乎所有的符号/字符。
使用UTF-8编码,你也可以通过URLEncoder.encode(string, encoding)实现相同的功能
此外,你可以参考这篇博客, 它尝试对一些中文字符进行编码,比如'维也纳恩斯特哈佩尔球场'