以前的时候发现直接java读取一个excel文件输出里面的字符串会乱码,中文字符不会乱码,但是遇到英文的时候输出会乱码。这个问题太奇怪了。

我的表格名字为Shirley.xls。

我曾经直接读取excel表格中那个有英文字符串的单元格

Workbook book = Workbook.getWorkbook(new File("D:\\excel\\Shirley.xls"));

// 获得第一个工作表对象

Sheet st = book.getSheet(0);

// 得到单元格

System.out.println(st.getColumns());

Cell c1 = st.getCell(1,11);

String name = c1.getContents().replaceAll(" ", "");

System.out.println(name);

book.close();

打印的时候输出:�Shirley;

显然这个单元格在读取的时候有问题,编码格式不对。

开始的时候我尝试将这个字符串name编码转换,String s1 = new String(name.getBytes("GBK"),"UTF-8");

但是输出还是会有问题: ?Shirley.

解决方法一:

查阅网上资料发现在读取excel的时候一开始设置好读取的编码方式就能解决中文乱码,那这个对于英文乱码会不会有效呢?

于是修改了以上读取excel时候的代码:

WorkbookSettings workbookSettings = new WorkbookSettings();

workbookSettings.setEncoding("ISO-8859-1");

Workbook book = Workbook.getWorkbook(new File("D:\\excel\\Shirley.xls"),workbookSettings);

打印输出正常:Shirley.

--------------------------------------------

解决方法二:

你也可以不修改初始读取excel的编码方式,在读取String name = c1.getContents().replaceAll(" ", "");

的时候将name的最开始一个字节截掉,这样就也能显示正常,

注意是截掉一个字节,不是一个字符,如果用String方式截掉最前面一个字符,显示就为:hirley。

public static String cutOneByte(String str) {

if (str != null && !str.equals("")) {

byte[] a = str.getBytes();// 转化为字节流处理,去掉最前面一个字节,以防止第一个字母乱码

byte[] b = new byte[a.length - 1];

for (int i = 1; i < a.length; i++) {

b[i - 1] = a[i];

}

str = new String(b);

}

return str;

}

用以上方法:

name = name.cutOneByte(name);

这样子处理过后name也能显示正常了。不过没有第一种方法好。

在中文的情况下没有出现乱码现象,就是说当采用默认编码的方式读取excel的数据时候是用UTF-8方式读取的数据(我的eclipse平台采用UTF-8编码),中文字符没有受到影响。为什么在UTF-8方式下读取英文字符串的时候会乱码呢,我这边第二种方法显示这个英文字符在utf-8下读取的时候最前面有一个字节和英文字符s结合后产生了乱码,但是不明白这个导致乱码的字节有什么作用在excel中。我怀疑最大的可能是excel中排版以及格式问题导致的。

java excel 中文乱码_java中读取excel文件中字符串乱码问题解决方法相关推荐

  1. java object取数据_java使用ObjectInputStream从文件中读取对象

    import java.io.EOFException; import java.io.FileInputStream; import java.io.FileNotFoundException; i ...

  2. java文档打印_java 如何读取文档中的内容 并打印

    java 如何读取文档中的内容 并打印 关注:230  答案:2  信息版本:手机版 电脑版 解决时间 2021-01-25 16:31 提问者非莪莫属 2021-01-25 04:31 java 如 ...

  3. 在java中读取某个文件中的数据内容

    代码 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java ...

  4. java 解析xml 对象_Java反射——读取XML文件,创建对象

    读取XML文件,创建对象 config.xml import java.io.*; import java.lang.reflect.Constructor; import javax.xml.par ...

  5. java excel公式计算_java poi读取excel公式,返回计算值(转) | 学步园

    http://blog.csdn.net/CYZERO/article/details/6573015 经测试,确实可以 1 package hrds.zpf.poi; 2 3  import org ...

  6. java scanner接收数组_java – 使用scanner将文件中的整数读入数组

    我正在为学校做一份复习工作.赋值是编写一个类,它从标准输入读取一个包含几个整数的文件,这些整数将被放入一个数组中.从这里开始,需要编写方法来找出平均值,中位数,最大值,最小值和标准差. 它读起来像这样 ...

  7. java获取word图片_java代码获取word文件中的图片

    1:需求 在线打开word文件后,用户插入图片.然后保存图片到服务器 2:方案 用pageoffice 在线打开文档的功能和提交数据的功能实现 3:核心代码 4:实现过程 (1)因为要获取数据区域的数 ...

  8. java 读取txt文件指定行_在Java中读取txt文件中的特定行

    要获得第N行,您必须阅读它之前的所有行. 如果不止一次这样做,最有效的方法可能是首先将所有行加载到内存中. private final List words = new ArrayList(); pr ...

  9. 在asp.net中读取XML文件信息的4种方法

    方法一 :使用XML控件     <% @ Page Language="C#"%>  <html> <body>         <h3 ...

  10. c++语言读txt数据,关于C++中读取txt文件中字符串 - 程序语言 - 小木虫 - 学术 科研 互动社区...

    #include<iostream> #include<fstream> #include<string> #include<vector> using ...

最新文章

  1. response设置content-type
  2. 字符串匹配--Sunday算法
  3. 【计算机组成原理】十进制数串
  4. 图论--最短路-- Dijkstra模板(目前见到的最好用的)
  5. 记录自己的nest学习之旅
  6. android @style/name,android style和attr的用法
  7. CS224N笔记——词向量表示
  8. kubernetes视频教程笔记 (27)-集群调度-污点和容忍
  9. VS2015 卸载与安装相关问题(包丢失以及没有WIN控制台)
  10. 途家供应链系统架构演进实践
  11. 基于Retrofit框架的金山API翻译功能案例
  12. 极域电子教室学生端全屏广播的破解及编程处理(附静态库)
  13. 机器学习算法_Quora上的大牛们最喜欢哪种机器学习算法?
  14. Aras innovator: 粗绘innovator框架
  15. ThinkPad安装ALPS驱动后任然关闭触摸板失败的解决方法
  16. Tomcat部署及优化
  17. (FortiGate)飞塔防火墙配置端口映射(VIP)
  18. linux下启动nginx报错libpcre.so.0 = not found
  19. 编译原理学习(二)--终结符和非终结符
  20. Centos7 docker完美卸载

热门文章

  1. linux nc命令--功能强大的网络工具
  2. What?!人工智能还没有人类四岁儿童聪明?
  3. android后台进程限制,Android O:服务未被后台执行限制停止
  4. 武汉新时标文化传媒有限公司抖音视频拍摄落地时的几个问题
  5. html图片排列布局下面字_css实现朋友圈照片排列布局代码实例
  6. android将彩图转为黑白_[Android学习笔记九] Android 开发中图片灰阶(黑白)显示...
  7. 用Python提取图片截图中的文字
  8. 操作系统真象还原_第零章_解惑
  9. JAVA编写程序,打印九九乘法表(涵盖三种表达形式)
  10. 报名丨 英伟达初创企业展示-华北分站赛