Web Dynpro利用JXL读取Excel汉字乱码问题

今天在利用web Dynpo开发一个从Excel文件中读取信息,并在页面上展示的功能。通过网上找到一个jexcelapi的开发包,发现处理Excel文件非常强大,可以很方便的对Excel文件进行操作。但是当我进行读取Excel文件时,如果Excel文件中有中文时,出现了乱码。我尝试了各种字符集转化,折腾了一个下午还是没有搞定。根据网上朋友提供的设置了workbooksettings的编码,结束还是没有解决。最后我进行jxl源代码的单步调试,最后跟踪到jxl.biff.StringHelper这个类的getUnicodeString方法时

 public static String getUnicodeString(byte[] d, int length, int pos)
  {
    try
    {
      byte[] b = new byte[length * 2];
      System.arraycopy(d, pos, b, 0, length * 2);
      return new String(b, UNICODE_ENCODING);
    }
    catch (UnsupportedEncodingException e)
    {
      // Fail silently
      return "";
    }
  }

在return,经过new String转化以后就出现了乱码。

然后我就在StringHelper类中找到 UNICODE_ENCODING值为UnicodeLittle

然后在 注释中发现

 // Due to a a Sun bug in some versions of JVM 1.4, the UnicodeLittle
  // encoding doesn't always work.  Making this a public static field
  // enables client code access to this (but in an undocumented and
  // unsupported fashion).  Suggested alternative values for this
  // are  "UTF-16LE" or "UnicodeLittleUnmarked

说明在部分1.4的JVM中UnicodeLittle运行不正常,然后我就把

public static String UNICODE_ENCODING = "UnicodeLittle";

改成

public static String UNICODE_ENCODING = "UTF-16LE";

然后把这个类重新编译后,添加到原先的Jar包,覆盖原先的StringHelper类,再次运行我的程序,读到中文后显示一起OK。

.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值