[color=#345286][b] Java Web 应用程序经常会出现乱码的情况,这里可以通过 Servlet API 中的标准 Filter 来实现,也可以在 Web 容器配置 URIEncoding。这些都依赖于浏览器的请求方式。[/b][/color]
[table]
|| | [color=#345286][b]在 Web 容器的配置文件中配置 URIEncoding = "UTF-8"[/b][/color] | [color=#345286][b]使用 Servlet API 的标准 Filter[/b][/color] | [color=#345286][b]结果[/b][/color] ||
|| [color=#345286]地址栏中直接输入链接(含汉字)[/color] | [color=#345286]√[/color] | [color=#345286]×[/color] | [color=#345286]失败(编码成功)[/color] ||
|| [color=#345286]地址栏中直接输入链接(含汉字)[/color] | [color=#345286]×[/color] | [color=#345286]√[/color] | [color=#345286]失败(编码成功)[/color] ||
|| [color=#345286]地址栏中直接输入链接(含汉字)[/color] | [color=#345286]√[/color] | [color=#345286]√[/color] | [color=#345286]失败(编码成功)[/color] ||
|| [color=#345286]页面内的普通链接(a 标签,含汉字)[/color] | [color=#345286]√[/color] | [color=#345286]×[/color] | [color=#345286]编码成功,地址栏中直接显示汉字[/color] ||
|| [color=#345286]页面内的普通链接(a 标签,含汉字)[/color] | [color=#345286]×[/color] | [color=#345286]√[/color] | [color=#345286]编码失败[/color] ||
|| [color=#345286]页面内的普通链接(a 标签,含汉字)[/color] | [color=#345286]√[/color] | [color=#345286]√[/color] | [color=#345286]编码成功,地址栏中直接显示汉字[/color] ||
|| [color=#345286]form get 提交[/color] | [color=#345286]√[/color] | [color=#345286]×[/color] | [color=#345286]编码成功,地址栏显示编码后的汉字[/color] ||
|| [color=#345286]form get 提交[/color] | [color=#345286]×[/color] | [color=#345286]√[/color] | [color=#345286]编码失败[/color] ||
|| [color=#345286]form get 提交[/color] | [color=#345286]√[/color] | [color=#345286]√[/color] | [color=#345286]编码成功,地址栏显示编码后的汉字[/color] ||
|| [color=#345286]form post 提交[/color] | [color=#345286]√[/color] | [color=#345286]×[/color] | [color=#345286]编码失败[/color] ||
|| [color=#345286]form post 提交[/color] | [color=#345286]×[/color] | [color=#345286]√[/color] | [color=#345286]编码成功[/color] ||
|| [color=#345286]form post 提交[/color] | [color=#345286]√[/color] | [color=#345286]√[/color] | [color=#345286]编码成功[/color] ||
[/table]
[color=#345286] 因此,通过以上表格的总结,我们可以得出这样一个结论:[b]URLEncoding 是针对 get 请求,Filter 是针对 post 请求。[/b][/color]
[table]
|| | [color=#345286][b]在 Web 容器的配置文件中配置 URIEncoding = "UTF-8"[/b][/color] | [color=#345286][b]使用 Servlet API 的标准 Filter[/b][/color] | [color=#345286][b]结果[/b][/color] ||
|| [color=#345286]地址栏中直接输入链接(含汉字)[/color] | [color=#345286]√[/color] | [color=#345286]×[/color] | [color=#345286]失败(编码成功)[/color] ||
|| [color=#345286]地址栏中直接输入链接(含汉字)[/color] | [color=#345286]×[/color] | [color=#345286]√[/color] | [color=#345286]失败(编码成功)[/color] ||
|| [color=#345286]地址栏中直接输入链接(含汉字)[/color] | [color=#345286]√[/color] | [color=#345286]√[/color] | [color=#345286]失败(编码成功)[/color] ||
|| [color=#345286]页面内的普通链接(a 标签,含汉字)[/color] | [color=#345286]√[/color] | [color=#345286]×[/color] | [color=#345286]编码成功,地址栏中直接显示汉字[/color] ||
|| [color=#345286]页面内的普通链接(a 标签,含汉字)[/color] | [color=#345286]×[/color] | [color=#345286]√[/color] | [color=#345286]编码失败[/color] ||
|| [color=#345286]页面内的普通链接(a 标签,含汉字)[/color] | [color=#345286]√[/color] | [color=#345286]√[/color] | [color=#345286]编码成功,地址栏中直接显示汉字[/color] ||
|| [color=#345286]form get 提交[/color] | [color=#345286]√[/color] | [color=#345286]×[/color] | [color=#345286]编码成功,地址栏显示编码后的汉字[/color] ||
|| [color=#345286]form get 提交[/color] | [color=#345286]×[/color] | [color=#345286]√[/color] | [color=#345286]编码失败[/color] ||
|| [color=#345286]form get 提交[/color] | [color=#345286]√[/color] | [color=#345286]√[/color] | [color=#345286]编码成功,地址栏显示编码后的汉字[/color] ||
|| [color=#345286]form post 提交[/color] | [color=#345286]√[/color] | [color=#345286]×[/color] | [color=#345286]编码失败[/color] ||
|| [color=#345286]form post 提交[/color] | [color=#345286]×[/color] | [color=#345286]√[/color] | [color=#345286]编码成功[/color] ||
|| [color=#345286]form post 提交[/color] | [color=#345286]√[/color] | [color=#345286]√[/color] | [color=#345286]编码成功[/color] ||
[/table]
[color=#345286] 因此,通过以上表格的总结,我们可以得出这样一个结论:[b]URLEncoding 是针对 get 请求,Filter 是针对 post 请求。[/b][/color]