2014-06-13 31 views
0

我已經使用下面的代碼讓用戶在我的網頁上上傳一個csv文件。 的CSV包含以下信息:使用CSV2TableLayout解析CSV,但得到了一個問號

12345,account,password,ABC,Tom,0 
12346,account,password,ABC,Jerry,0 
12347,account,password,ABC,Mary,0 

doPost.java

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    ServletFileUpload upload = new ServletFileUpload(); 
    upload.setHeaderEncoding("UTF-8"); 
    response.setContentType("text/html"); 
    response.setCharacterEncoding("UTF-8"); 
    request.setCharacterEncoding("UTF-8"); 
    String type = ""; 
    String mode = ""; 
    String name = ""; 
    String remark = ""; 
    String id = ""; 
    Enumeration params = request.getParameterNames(); 
    while (params.hasMoreElements()) 
    { 
     String param = (String) params.nextElement(); 
     if (param.equals("type")) type = request.getParameter(param); 
     if (param.equals("mode")) mode = request.getParameter(param); 
     if (param.equals("name")) name = request.getParameter(param); 
     if (param.equals("remark")) remark = request.getParameter(param); 
     if (param.equals("id")) id = request.getParameter(param); 
    } 

    FileItemIterator iterator = upload.getItemIterator(request); 
    while (iterator.hasNext()) 
    { 
     FileItemStream item = iterator.next(); 

     if (!item.isFormField()) 
     { 
      InputStream stream = item.openStream(); 
      //try print stream 
      BufferedReader lesen = new BufferedReader(new InputStreamReader(stream)); 
      String line = lesen.readLine(); 
      while(line!=null) 
      { 
       System.out.println("stream: "+line); 
       line = lesen.readLine(); 
      } 

      if (type.equals("csv")) 
      { 
       List<BaseModel> devices = CsvParser.csv2ListBaseModel(stream); 
      } 
     } 
    } 
} 

的的System.out.println將打印出的CSV文件不正確的內容:

Stream: 嚜?2345,account,password,ABC,Tom,0 
Stream: 12346,account,password,ABC,Jerry,0 
Stream: 12347,account,password,ABC,Mary,0 

雖然CsvParser .csv2ListBaseModel(流)也會返回不正確的內容。

import dk.lindhardt.gwt.geie.server.CSV2TableLayout; 
import dk.lindhardt.gwt.geie.shared.Cell; 
import dk.lindhardt.gwt.geie.shared.TableLayout; 
public class CsvParser 
{ 
    public static List<BaseModel> csv2ListBaseModel(InputStream stream) 
    { 
     CSV2TableLayout csv2TableLayout = new CSV2TableLayout(stream); 
     TableLayout tableLayout = csv2TableLayout.build(); 
     List<Cell> cells = tableLayout.getCells(); 
     List<BaseModel> devices = new ArrayList<BaseModel>(); 
     BaseModel device = null; 

     for (int row = 0; row < tableLayout.rows(); row++) 
     { 
      device = new BaseModel(); 
      for (int column = 0; column < tableLayout.columns(); column++) 
      { 
       String value = null; 
       try 
       { 
        value = (String) tableLayout.getCell(row, column).getValue(); 
       } catch (NullPointerException npe) 
       { 
        // 
       } 
       device.set(column + "", value); 
      } 

      devices.add(device); 
     } 
     return devices; 
    } 
} 

最後,當我已存儲的設備到數據庫中,在第一行中的第一個字(12345)會變成什麼?12345 CSV文件是UTF-8編碼。 任何建議表示讚賞。 謝謝

回答