相关疑难解决方法(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万
查看次数

当BOM(字节顺序标记)丢失时,如何最好地猜测编码?

我的程序必须读取使用各种编码的文件.它们可以是ANSI,UTF-8或UTF-16(大或小端).

当BOM(字节顺序标记)出现时,我没有问题.我知道文件是UTF-8还是UTF-16 BE或LE.

我想假设没有BOM文件是ANSI.但我发现我正在处理的文件经常缺少BOM.因此,没有BOM可能意味着该文件是ANSI,UTF-8,UTF-16 BE或LE.

当文件没有BOM时,扫描某些文件并最准确地猜测编码类型的最佳方法是什么?如果文件是ANSI,我希望接近100%的时间,如果是UTF格式,我希望接近100.

我正在寻找一种通用的算法来确定这一点.但实际上我使用Delphi 2009,它知道Unicode并且有一个TEncoding类,所以特定的东西将是一个奖励.


回答:

ShreevatsaR的回答让我在Google上搜索"通用编码检测器delphi",这让我感到惊讶,因为这个帖子在活着只有大约45分钟后被列为#1位置!这是快速googlebotting !! 同样令人惊讶的是Stackoverflow如此迅速地进入第一名.

Google的第二个条目是Fred Eaker关于字符编码检测的博客文章,列出了各种语言的算法.

我发现在该页面上提到了Delphi,它让我直接进入SourceForge的Free OpenSource ChsDet Charset Detector,这是用Delphi编写的,基于Mozilla的i18n组件.

太棒了!谢谢所有回复的人(全+1),谢谢ShreevatsaR,再次感谢Stackoverflow,帮助我在不到一个小时内找到答案!

delphi algorithm encoding byte-order-mark delphi-2009

29
推荐指数
2
解决办法
8026
查看次数

在Java中我可以要求系统告诉我文件的字符集吗?

有很多问题像这样,那是关于猜测文件的字符集/编码.但是,在尝试猜测之前,Java中是否有一种方法要求系统告诉我?

java character-encoding

0
推荐指数
2
解决办法
174
查看次数

关于JAVA编码识别

我有一个字符串,如"%E6%B1%82%E5%8A%A9".

我的问题是我怎么知道它是由"UTF-8"编码的.它似乎也像GBK(或GB2312)编码.

谢谢.

java encoding utf-8

-1
推荐指数
1
解决办法
211
查看次数