2014-03-24 22 views
0

我有.txt文件,我想將這個文件轉換爲UCS-2格式
究竟應該轉換
文件正確的方法是約700MB所以不能打開記事本++ n轉換.txt文件

請建議。

+0

取決於原始文件編碼幾乎一樣! – fge

+0

原文爲ANSI –

+0

沒有像ANSI那樣的字符編碼。你的意思是ASCII嗎? – fge

回答

0

好的,首先:Notepad ++顯示ANSI,ANSI不是字符編碼。據this SO answer和其他各種,它似乎是Windows-1252。

至於UCS-2,它已被UTF-16取代,它可以編碼更多的代碼點。無論如何,在定義UCS-2時,它編碼的碼比Windows-1252更多,所以在這裏使用UTF-16就OK了。

但是,與USC-2一樣,UTF-16依賴於字節順序。我們將在這裏假設小端。

因此:

final Path src = Paths.get("/path/to/original/file.txt") 
final Path dst = Paths.get("/path/to/destination/file.txt"); 

final char[] buf = new char[1 << 20]; // 1 MB char buffer 
int nrChars; 

try (
    final BufferedReader reader = Files.newBufferedReader(src, 
     Charset.forName("windows-1252")); 
    final BufferedWriter writer = Files.newBufferedWriter(dst, 
     StandardCharsets.UTF_16LE, StandardOpenOption.CREATE); 
) { 
    while ((nrChars = reader.read(buf, 0, buf.length)) != -1) 
     writer.write(buf, 0, nrChars); 
    writer.flush(); 
} 

這應該工作。

0

/*這是我在java中如何實現它如上*/

    PrintWriter writer = new PrintWriter("destinationfile.txt",      
        "UTF-16LE"); 
     writer.write("\uFEFF"); 

     File srcfile = new File("sourceFile.txt"); 
     FileReader fileReader = new FileReader(srcfile); 
     BufferedReader br = new BufferedReader(fileReader); 
     String line; 
     try { 
      while ((line = br.readLine()) != null) { 
       writer.write(line); 
       writer.write("\r\n"); 
      } 
      writer.close(); 
      br.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     }