使用场景
我们已经实现了一个Web服务,我们的Web前端开发人员在内部使用(通过php api)来显示产品数据.在网站上,用户输入内容(即查询字符串).在内部,网站通过api调用服务.
注意:我们使用restlet,而不是tomcat
原始问题
Firefox 3.0.10似乎尊重浏览器中选定的编码,并根据所选编码对URL进行编码.这确实导致ISO-8859-1和UTF-8的不同查询字符串.
我们的网站转发来自用户的输入并且不转换它(它应该),因此它可以通过使用包含德语变音符号的查询字符串调用web服务的api来调用服务.
即查询部分看起来像
...v=abcädef
Run Code Online (Sandbox Code Playgroud)
如果选择"ISO-8859-1",则发送的查询部分看起来像
...v=abc%E4def
Run Code Online (Sandbox Code Playgroud)
但是如果选择"UTF-8",则发送的查询部分看起来像
...v=abc%C3%A4def
Run Code Online (Sandbox Code Playgroud)
期望的解决方案
当我们控制服务时,因为我们已经实现了它,我们想在服务器端检查调用是否包含非utf-8字符,如果是,则以4xx http状态响应
当前的解决方案
检查每个字符(== string.substring(i,i + 1))
码
protected List< String > getNonUnicodeCharacters( String s ) {
final List< String > result = new ArrayList< String >();
for ( int i = 0 , n = s.length() ; i < n ; i++ ) {
final String character = s.substring( i , i + 1 );
final boolean isOtherSymbol =
( …Run Code Online (Sandbox Code Playgroud)