转换UCS-2文件格式的.txt文件

时间:2014-03-24 14:37:54

标签: java file-format

我有.txt文件,我想将此文件转换为UCS-2格式
什么应该是正确的转换方式 文件大约是700mb,因此无法在Notepad ++ n convert

中打开

请建议。

2 个答案:

答案 0 :(得分:0)

好的,首先:Notepad ++显示ANSI,ANSI不是字符编码。根据{{​​3}}和其他各种情况,它似乎是Windows-1252。

对于this SO answer,它已经被UTF-16取代,它可以编码更多的代码点。无论如何,在定义UCS-2时,它编码的代码点数比Windows-1252多,所以在这里使用UTF-16就可以了。

然而,像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();
}

这应该有用。

答案 1 :(得分: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();
        }