-
读取excel,csv文件 出现多国文字问号(并非中文乱码)25
我们公司是在ebay上卖东西的,每天都会有四五百条交易记录,ebay把这些交易记录导出成csv文件供用户下载。
下载这份文件之后,现在是用人力来处理这份文件,来整理出我们想要的报表,这当然是效率低,容易出错啦,一出错就是直接经济损失。(其中很大的部分是在处理乱码问题,由于文档里面可能出现多个欧洲国家的文字,所以很容易出现?HUO或乱码)
如果直接用 office excel打开csv文件,里面出现?及乱码,比如德文,但如果用OpenOffice calc 选择utf-8打开则正常显示
公司的意思是要我用系统来处理这份文档,生成excel报表
我最初的想法是先把csv文件先转化为excel文件,然后把这个excel文件上传到系统里面去,然后系统用jxl读取excel文件的内容,然后结合数据库通过excel模板输出excel报表。
1,csv转换成excel:用OpenOffice Calc(3.1)打开,打开的时候要选择编码方式,我用的是
utf-8,打开后没有乱码,然后另存为97的excel模板文件(*.xls),然后再用office excel打开,内容显示正常。
2,问题出现了,把文件上传到系统里面,然后jxl读取excel的内容到程序里面出现乱码和问号,后来通过在网上找资料,在程序里指定了utf-8方式读取文件,乱码没有了,但是还有问号出现。换了其他编码方式还是不行,比如gb2312,us-ascii,ISO-8859-1,ISO-8859-2,ISO-8859-9,ISO-8859-15.
很郁闷啊,用office 打开这个excel文件内容正常,但是一旦用程序读取之后就出现问号了,
老板逼得急,各位帮忙提点建议!!!
csv文件和excel文件我已经上传到附件里面了(csv.rar),压缩包
jar包也上传了
如果附件拿不了的话可以去一下的地址下载
两个文件的地址
http://112.91.144.170:8888/csv.csv (用迅雷或者其他工具先下载下来再打开)
http://112.91.144.170:8888/excel.xls
jar包:
http://112.91.144.170:8888/jxl.jar //读excel
http://112.91.144.170:8888/opencsv-2.0.jar //读csv
http://112.91.144.170:8888/javacsv.jar //读csv
更尴尬的事发生了,在几乎网上推荐的编码方式都试过了之后,我转变思维,直接用程序指定utf-8方式读取csv文档,程序里面还是有问号出现,但是如果用前面提到的OpenOffice calc 指定utf-8打开却没有问题。用UltraEdit打开也没问题。
后来我试了另外两个读取csv的jar包(opencsv-2.0.jar,javacsv.jar),结果还是一样
令我疑惑的是,连utf-8也解释不了的字符,其他编辑软件是怎么处理的,至于程序出现的问号,问题到底出现在哪里?
下不了jar包或文件的加我QQ363292613
读取excel文档代码如下(只打印输出在控制台上):import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.WorkbookSettings; private static Workbook getWorkbook(String filePath){ try { // 构建Workbook对象, 只读Workbook对象 // 直接从本地文件创建Workbook // 从输入流创建Workbook // 创建只读的Excel工作薄的对象 WorkbookSettings workbookSettings=new WorkbookSettings(); workbookSettings.setEncoding("utf-8"); //关键代码,解决中文乱码 但英文就? // workbookSettings.setEncoding("gb2312"); // workbookSettings.setEncoding("us-ascii"); // workbookSettings.setEncoding("iso-8859-1"); // workbookSettings.setEncoding("iso-8859-2"); // workbookSettings.setEncoding("iso-8859-9"); // workbookSettings.setEncoding("iso-8859-15"); InputStream is = new FileInputStream(filePath); // Workbook wb=Workbook.getWorkbook(is, workbookSettings); return Workbook.getWorkbook(is,workbookSettings); } catch (Exception e) { System.out.println("----------------Exception Occured,when read Excel file."); return null; } } @SuppressWarnings("unchecked") public static List readExcel(String filePath) { List datas = null; rwb=getWorkbook(filePath); Sheet rs = rwb.getSheet(0); Cell[] cells = rs.getColumn(15); datas = new ArrayList(); for (int i = 0;i< cells.length;i++) { Cell[] cells2=rs.getRow(i); if (i == 0) { Map title=wrap(cells2); title.put(42, "HK$"); title.put(43, "Account"); datas.add(title); continue; } if (filterData(rs.getRow(i))) { datas.add(wrap(rs.getRow(i)));//数据处理 } } rwb.close(); return datas; } //包装数据 @SuppressWarnings("unchecked") private static Map wrap(Cell[] row ){ Map o=new LinkedHashMap(); for(int i=0;i<columnNum;i++){ String c=null; if(i+1>row.length){ c=""; }else{ c=row[i].getContents(); } if(i==14&&c!=null&&!c.equals("")){ //第15列显示邮寄地址 System.out.println(c); } if(i==38){//第39列显示国家 System.out.println(c); } o.put(i,c); } return o; }
读取csv文件的代码:import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import com.csvreader.CsvReader; import au.com.bytecode.opencsv.CSVReader; public class testFile { public static void main(String[] args) throws Exception { // testFile.importCsvFile(); testFile.csv2(); // testFile.CSVReaderDemo(); } private static String filePath = "F:\\26112009-original.csv"; @SuppressWarnings("unchecked") public static void CSVReaderDemo(){ try { CsvReader reader = new CsvReader(filePath,',',Charset.forName("UTF-8")); reader.readHeaders(); String[] headers = reader.getHeaders(); //int headerCount = reader.getHeaderCount(); //int col = reader.getColumnCount(); List list = new ArrayList(); while(reader.readRecord()){ String[] str=reader.getValues(); System.out.println(Arrays.deepToString(str)); // list.add(reader.getValues()); } Iterator it=list.iterator(); } catch (Exception ex){ ex.printStackTrace(); } } public static void csv2() throws Exception{ DataInputStream in = new DataInputStream(new FileInputStream(new File("F:\\26112009-original.csv"))); //讀csv file String fileType; fileType="utf-8"; // fileType="gb2312"; // fileType="us-ascii"; // fileType="iso-8859-1"; // fileType="iso-8859-2"; // fileType="iso-8859-9"; // fileType="iso-8859-15"; String responseLine; BufferedReader bf; bf = new BufferedReader(new InputStreamReader(in,fileType)); //讀data using BufferedReader fileType 是csv file's format if file is Big5 fileType="Big5" etc... while ((responseLine = bf.readLine()) != null){ // System.out.println(responseLine); String str[]=responseLine.split(","); // System.out.println(str.length); // for(int i=0;i<str.length;i++){ // System.out.print(str[i]+" "); // // } System.out.print(str[3]+" "); System.out.print(str[str.length-3]+" "); System.out.println(); // System.out.println(str[3]); // System.out.println(str[38]); } } public static void importCsvFile() { CSVReader csvReader = null; try { DataInputStream in = new DataInputStream(new FileInputStream(new File("F:\\26112009-original.csv"))); // csvReader = new CSVReader(new FileReader("F:\\Program\\Tomcat5.5\\webapps\\QSF\\excel\\1260416476676.csv"),',');//importFile为要导入的文本格式逗号分隔的csv文件,提供getXX/setXX方法 csvReader = new CSVReader(new InputStreamReader(in,"utf-8"),','); if(csvReader != null){ //first row is title, so past csvReader.readNext(); String[] csvRow = null;//row while ((csvRow = csvReader.readNext()) != null){ for (int i =0; i<csvRow.length; i++){ String temp = csvRow[i]; if(i==14){ System.out.println(initString(temp)); } } } } } catch (Exception e) { e.printStackTrace(); } } public static String initString(String str) { try { return new String(str.getBytes("UTF-8"),"UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }
2009年12月12日 14:18
1个答案 按时间排序 按投票排序
-
我直接用程序读csv并没出现乱码呀,开始的时候391行会出现中文乱码,我看来下java文件时GB18030的编码,改成utf-8的编码后,就不会打出乱码了.
import java.io.BufferedReader; import java.io.FileReader; public class TestCsv { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { FileReader fr = new FileReader("res/csv.csv"); BufferedReader br = new BufferedReader(fr); String temp = ""; int i = 0; while((temp=br.readLine()) != null){ System.out.print(++i + " "); System.out.println(temp); } br.close(); fr.close(); } }
2009年12月23日 12:47
相关推荐
下面我们将深入探讨如何在Java中正确地读取和写入CSV文件,以及解决中文乱码的问题。 1. **字符编码的理解**: - 在处理中文字符时,必须确保使用正确的字符编码,例如UTF-8。UTF-8是一种广泛支持的编码格式,可以...
本文将深入探讨如何在Java环境中读取Excel格式(.xls或.xlsx)以及CSV(逗号分隔值)格式的文件,同时也会提及所给的压缩包文件中的相关资源。 首先,Excel文件是一种由Microsoft Office提供的电子表格格式,用于...
当处理包含中文字符的CSV文件时,可能会遇到乱码问题,这通常与文件编码设置有关。本篇文章将详细探讨如何在Java中解析CSV文件,并解决中文乱码的问题。 首先,我们需要了解如何使用Java的标准库`java.io`和`java....
Java避免UTF-8的csv文件打开中文出现乱码的方法 在Java中,避免UTF-8的csv文件打开中文出现乱码的方法是非常重要的。csv文件是 comma separated values 的缩写,常用于数据交换和导入导出操作。然而,在Java中读取...
//C# 读取Excel文件、C#读取xls文件、C#读取xlsx文件、C#读取csv文件 //C# 将xls文件转换为DataTable、C#将xlsx文件转换为DataTable //C#将csv文件转换为DataTable //C#将txt文件转换为DataTable(列与列之间空格隔...
虽然标题提到的是“文件流读取CSV文件”,但你提到了“EXCEL”。在某些情况下,可能需要将CSV数据与Excel工作表进行交互。虽然文件流可以处理CSV文件,但处理Excel文件(.xlsx或.xls)通常需要使用更复杂的库,如...
在C#编程中,将Excel或CSV文件的数据加载到Chart控件中,通常是为了创建数据可视化图表,如折线图。这种技术广泛应用于数据分析、报表生成以及数据展示等领域。下面我们将详细探讨如何实现这一功能。 首先,我们...
ABAP读取本地CSV文件
在C语言中,读取CSV(Comma Separated Values)文件是一项常见的任务,尤其是在数据处理和分析场景下。CSV文件以其简洁的格式,被广泛用于存储表格数据,如数据库导出、数据分析等。本篇文章将深入讲解如何使用C语言...
C#读取CSV EXCEL文件的知识点解析 C#读取CSV EXCEL文件是指使用C#语言读取CSV(Comma Separated Values,逗号分隔值)文件和EXCEL文件的方法。CSV文件是一种通用的文本文件格式,用于存储表格数据,而EXCEL文件是一...
文件中包括读取excel、csv文件,同时可以将读取出的文件内容保存在另外一个excel或csv中。注意excel2003和excel2007调用的jar包也不一样,需要将代码进行修改。2007版的将HSSF改成XSSF,2003相反。csv文件用XSSF
fortran读写CSV文件模块声明:type(csv_file)::f写文件 初始化 f%initialize() 打开文件 f%open() 关闭文件 f%close() 增加数据 f%add() 换行 f%next_row()读文件 f%read() 读取数据 f%get() 获取数据总行数 f%get_n...
在介绍如何使用JavaScript(简称JS)读取CSV文件并使用JSON格式进行展示之前,我们先来了解几个基础概念。 CSV文件是逗号分隔值(Comma-Separated Values)文件的简称,是一种简单的文件格式,用于存储表格数据,...
可读取复杂的csv文件,根据引号和逗号等分割读取所需要的数据信息。
matlab读取csv文件例程,读取指定路径下的所有csv文件
本文将深入探讨如何读取和创建CSV文件,并特别关注自动解析文件编码方式这一关键环节。我们将使用Java语言进行示例,同时引入第三方库来辅助处理编码问题。 首先,创建CSV文件的基本过程涉及将数据写入具有特定分隔...
本文将深入探讨如何利用pandas模块读取CSV文件和Excel表格,并使用matplotlib进行数据的可视化展示。 首先,pandas库是一个功能强大的数据结构和数据分析工具,其核心数据结构是DataFrame,它提供了非常高效的数据...
codesys通过文件读取功能块是实现对CSV文件数据的读取, a、通过SysFileOpen指令打开文件; b、通过SysFileGetSizeByHandle获取文件字符序列大小; c、通过SysFileRead读取一次读取字符序列,并按顺序依次存入预先设...
在MFC中读取CSV(逗号分隔值)文件是常见的任务,特别是在处理数据导入、导出或数据分析时。CSV文件因其简洁的格式和广泛的兼容性而广泛使用。下面我们将详细介绍如何使用MFC来读取CSV文件。 首先,理解CSV文件的...