烈焰门户技术文章Web应用类
阅读文章

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

[日期: 2007-11-25 ] 来源:   作者: [字体: ]

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。

阅读:
录入: ☆我就‰喜欢☆ 打印 错误报告
上一篇: 2008年最大的安全威胁是Web威胁
下一篇: CopyFileEx 函数的简单用法
相关文章
本文评论(点击查看所有评论
  《Web Dynpro利用JXL读取Excel汉字乱码》的作者你好,如果您看到我的问题能及时的给我   (严磊 ,01月11日 )
发表评论
希望 寒冷 强悍 惊讶 开心 吃饭 恭喜 流泪 爱你 啊困 心碎
偷笑 咒骂 流汗 大哭 求爱 装酷 砖头 头晕 出气 呲牙 吸烟

点评:


  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规!
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任!
  • 本站管理人员有权保留或删除其管辖留言中的任意内容!
  • 本站有权在网站内转载或引用您的评论!
  • 参与本评论即表明您已经阅读并接受上述条款!
关于烈焰网 | 意见投诉 | 网站地图 | 联系方式 | Ajax技术
Copyright © 烈焰门户 www.Jvqq.Net.Cn All Rights Reserved 京ICP备07022601号