0 0

读取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
  • csv.rar (134.1 KB)
  • 下载次数: 247
  • jxl.jar (475.4 KB)
  • 下载次数: 30

1个答案 按时间排序 按投票排序

0 0

我直接用程序读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文件,中文乱码问题

    下面我们将深入探讨如何在Java中正确地读取和写入CSV文件,以及解决中文乱码的问题。 1. **字符编码的理解**: - 在处理中文字符时,必须确保使用正确的字符编码,例如UTF-8。UTF-8是一种广泛支持的编码格式,可以...

    读取Excel格式CSV格式文件

    本文将深入探讨如何在Java环境中读取Excel格式(.xls或.xlsx)以及CSV(逗号分隔值)格式的文件,同时也会提及所给的压缩包文件中的相关资源。 首先,Excel文件是一种由Microsoft Office提供的电子表格格式,用于...

    java 解析csv文件例子,csv文件 中文乱码问题

    当处理包含中文字符的CSV文件时,可能会遇到乱码问题,这通常与文件编码设置有关。本篇文章将详细探讨如何在Java中解析CSV文件,并解决中文乱码的问题。 首先,我们需要了解如何使用Java的标准库`java.io`和`java....

    Java避免UTF-8的csv文件打开中文出现乱码的方法

    Java避免UTF-8的csv文件打开中文出现乱码的方法 在Java中,避免UTF-8的csv文件打开中文出现乱码的方法是非常重要的。csv文件是 comma separated values 的缩写,常用于数据交换和导入导出操作。然而,在Java中读取...

    读取Excel文件xls、xlsx、csv格式文件,读取txt文件

    //C# 读取Excel文件、C#读取xls文件、C#读取xlsx文件、C#读取csv文件 //C# 将xls文件转换为DataTable、C#将xlsx文件转换为DataTable //C#将csv文件转换为DataTable //C#将txt文件转换为DataTable(列与列之间空格隔...

    C#文件流读取CSV文件

    虽然标题提到的是“文件流读取CSV文件”,但你提到了“EXCEL”。在某些情况下,可能需要将CSV数据与Excel工作表进行交互。虽然文件流可以处理CSV文件,但处理Excel文件(.xlsx或.xls)通常需要使用更复杂的库,如...

    C#读取excel、csv文件到折线图

    在C#编程中,将Excel或CSV文件的数据加载到Chart控件中,通常是为了创建数据可视化图表,如折线图。这种技术广泛应用于数据分析、报表生成以及数据展示等领域。下面我们将详细探讨如何实现这一功能。 首先,我们...

    ABAP读取本地CSV文件.txt

    ABAP读取本地CSV文件

    C语言读取CSV文件

    在C语言中,读取CSV(Comma Separated Values)文件是一项常见的任务,尤其是在数据处理和分析场景下。CSV文件以其简洁的格式,被广泛用于存储表格数据,如数据库导出、数据分析等。本篇文章将深入讲解如何使用C语言...

    C#读取CSV EXCEL文件

    C#读取CSV EXCEL文件的知识点解析 C#读取CSV EXCEL文件是指使用C#语言读取CSV(Comma Separated Values,逗号分隔值)文件和EXCEL文件的方法。CSV文件是一种通用的文本文件格式,用于存储表格数据,而EXCEL文件是一...

    java读写excel、csv文件

    文件中包括读取excel、csv文件,同时可以将读取出的文件内容保存在另外一个excel或csv中。注意excel2003和excel2007调用的jar包也不一样,需要将代码进行修改。2007版的将HSSF改成XSSF,2003相反。csv文件用XSSF

    program_open_fortran读取csv_fortran读取CSV文件模块_fortran读csv_

    fortran读写CSV文件模块声明:type(csv_file)::f写文件 初始化 f%initialize() 打开文件 f%open() 关闭文件 f%close() 增加数据 f%add() 换行 f%next_row()读文件 f%read() 读取数据 f%get() 获取数据总行数 f%get_n...

    js读取csv文件并使用json显示出来

    在介绍如何使用JavaScript(简称JS)读取CSV文件并使用JSON格式进行展示之前,我们先来了解几个基础概念。 CSV文件是逗号分隔值(Comma-Separated Values)文件的简称,是一种简单的文件格式,用于存储表格数据,...

    java分割读取csv文件内容可根据逗号引号来切割读取

    可读取复杂的csv文件,根据引号和逗号等分割读取所需要的数据信息。

    matlab读取csv文件例程,读取指定路径下的所有csv文件

    matlab读取csv文件例程,读取指定路径下的所有csv文件

    读取创建CSV文件并自动解析文件编码方式

    本文将深入探讨如何读取和创建CSV文件,并特别关注自动解析文件编码方式这一关键环节。我们将使用Java语言进行示例,同时引入第三方库来辅助处理编码问题。 首先,创建CSV文件的基本过程涉及将数据写入具有特定分隔...

    使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法

    本文将深入探讨如何利用pandas模块读取CSV文件和Excel表格,并使用matplotlib进行数据的可视化展示。 首先,pandas库是一个功能强大的数据结构和数据分析工具,其核心数据结构是DataFrame,它提供了非常高效的数据...

    codesys读取CSV文件数据的程序

    codesys通过文件读取功能块是实现对CSV文件数据的读取, a、通过SysFileOpen指令打开文件; b、通过SysFileGetSizeByHandle获取文件字符序列大小; c、通过SysFileRead读取一次读取字符序列,并按顺序依次存入预先设...

    MFC 读取csv文件

    在MFC中读取CSV(逗号分隔值)文件是常见的任务,特别是在处理数据导入、导出或数据分析时。CSV文件因其简洁的格式和广泛的兼容性而广泛使用。下面我们将详细介绍如何使用MFC来读取CSV文件。 首先,理解CSV文件的...

Global site tag (gtag.js) - Google Analytics