相关疑难解决方法(0)

如何确定String是否包含无效的编码字符

使用场景

我们已经实现了一个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))

  1. 如果character.getBytes()[0]等于63为'?'
  2. 如果Character.getType(character.charAt(0))返回OTHER_SYMBOL

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)

java string unicode encoding

32
推荐指数
4
解决办法
9万
查看次数

标签 统计

encoding ×1

java ×1

string ×1

unicode ×1