2014-03-24 20 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(); 
     }