我需要对 URL 组件进行编码。URL组件可以包含“?、#、=”等特殊字符,也可以包含中文字符。
我应该使用哪种字符集:UTF-8、UTF-16 还是 UTF-32?为什么?
我想你的意思是这里的百分比编码。
RFC 3986,第 2.5 节对此非常清楚(强调我的):
当新的 URI 方案定义表示由通用字符集 [UCS] 中的字符组成的文本数据的组件时,应首先根据 UTF-8 字符编码 [STD63] 将数据编码为八位字节;那么只有那些不对应于非保留集中的字符的八位位组才应该进行百分比编码。例如,字符 A 将表示为“A”,字符 LATIN CAPITAL LETTER A WITH GRAVE 将表示为“%C3%80”,字符 KATAKANA LETTER A 将表示为“%E3%82%A2” ”。
因此,这应该是UTF-8。
另外,请注意URLEncoder.encode();尽管多次推荐它,但事实是它不适合URI编码;引用类本身的javadoc:
此类包含用于将字符串转换为 application/x-www-form-urlencoded MIME 格式的静态方法
这不是URI 编码所使用的。(如果您想知道,application/x-www-form-urlencodedHTTP POST 数据中使用的是什么)您想要使用的是 URI 模板。例如参见此处。
| 归档时间: |
|
| 查看次数: |
6182 次 |
| 最近记录: |