我需要阅读我收到的excel(.xls)文件。 使用常规字符集,如UTF-8,Cp1252,ISO-8859-1,UTF-16LE,这些都没有帮助我,字符仍然是格式错误。
所以我搜索最终使用juniversalchardet,它向我显示字符集是MacCyrillic,使用MacCyrillic来读取文件,但仍然是同样奇怪的结果。
当我在excel上打开文件时一切都很好,所有的角色都很好,因为它的葡萄牙语充满了whit等等。但打开惠特记事本或通过java文件都搞砸了。 但是如果在我的Excel上打开文件然后像.txt那样再次保存它就变得可读了
我找到字符集的方法
public static void lerCharset(String fileName) throws IOException {
byte[] buf = new byte[50000000];
FileInputStream fis = new FileInputStream(fileName);
// (1)
UniversalDetector detector = new UniversalDetector(null);
// (2)
int nread;
while ((nread = fis.read(buf)) > 0 && !detector.isDone()) {
detector.handleData(buf, 0, nread);
}
// (3)
detector.dataEnd();
// (4)
String encoding = detector.getDetectedCharset();
if (encoding != null) {
System.out.println("Detected encoding = " + encoding);
} else {
System.out.println("No encoding detected.");
}
// (5)
detector.reset();
fis.close();
}
我怎样才能发现正确的字符集? 我应该尝试不同的方法吗?就像让我的java重新保存excel然后开始阅读一样?
答案 0 :(得分:3)
如果我理解您的问题,您就会尝试像文本文件一样阅读excel文件。
挑战在于.xls文件实际上是包含文本,格式,工作表信息,宏信息等的二进制文件......
您需要将文件保存为.csv(在运行程序之前通过Excel或直接通过程序),将它们升级到.xlsx(它有许多可以将文件读取为XML的库)在那时)或使用库(例如apache POI or anything similar)甚至使用ADO查询数据。
祝你好运,我希望通过你的问题暗示你的意思。
答案 1 :(得分:-1)
WorkbookSettings workbookSettings = new WorkbookSettings();
WorkbookSettings.setEncoding("Cp1252");