2017-10-06 5 views
-1

한 테이블에 6 개의 열이 있고 한 열에 한자가 들어 있으며이 테이블에 200 개의 레코드가 있습니다.한 줄로 된 한자가 깨졌습니다.

하나의 텍스트 파일로 저장하는 코드를 작성했습니다. 문제는 모든 레코드를 가져 오는 동안 파일에서 중국어 텍스트를 볼 수 있다는 것입니다. 그러나 하나의 레코드를 가져 오는 동안 나는 중국어 텍스트가 왜곡되어 있음을보고 있습니다.

아래 코드를 사용하고 있습니다.

public static void main(String args[]){ 
String outputFile = fileNameEncode("C:\\a\a.txt"); 
FileOutputStream os = new FileOutputStream(outputFile); 
writeToFile(os); 
} 

private static String fileNameEncode(String name) { 
     String file; 
     try { 
      byte[] utf_byte = name.getBytes("UTF-8"); 
      StringBuilder sb = new StringBuilder(1024); 

      for (byte b : utf_byte) { 
       int integer = b & 0xFF; // drop the minus sign 
       sb.append((char) integer); 
      } 
      file = sb.toString(); 
     } catch (Exception e) { 
      file = name; 
     } 
     return file; 
    } 

    public void writeToFile(FileOutputStream os) { 
    PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(ostream, "GBK"))); 

     for (int rowNum = 0; rowNum < arrayList.size(); rowNum++) {//arrayList contains data from db 
       ArrayList list = arrayList.get(rowNum); 

        for(int k = 0; k < list.size(); k++{ 
        String[] data = new String[6]; 
         for (int colNum = 0; colNum < 6; colNum++) { 
          data[colNum] = list.get(i).toString(); 
         } 

         String outLine = composeLine(data, ctlInfo);      

         // write the line 
         pw.print(outLine); 
         pw.println(); 

      } 
      } 

} 
    private static String composeLine(String[] data, ControlInfo ctl) { 
     StringBuilder line = new StringBuilder(); 
     String delim = "," 
     int elemCount = data.length; 
     for (int i = 0; i < elemCount; i++) { 
      if (i > 0) 
       line.append(delim); 
      if (data[i] != null && (data[i].contains("\n") || data[i].contains("\r") || 
        data[i].contains("\r\n"))){ 
       data[i] = data[i].replaceAll("(\\t|\\r?\\n)+", " "); 
      } 
      else { 
       line.append(data[i]); 
      } 
     } 

     return line.toString(); 
    } 

내가 잘못 된 위치를 알려주시겠습니까?

답변

0

문제가 발견되었습니다. 코드가 좋고, 메모장에 문제가 있습니다. ++. 노드 패드 ++의 문자 세트가 중국어 (GB2312)이면 정확한 텍스트를 볼 수 있습니다. 노트 패드 ++는 두 줄에 대해 자동으로 GB2312로 설정되지만 한 줄에 대해서는 GB2312로 자동 설정되지 않습니다.