2

如果之前有人问过,我很抱歉。我正在尝试使用 Java 处理文本文件。文本文件从 MS SQLServer 导出。当我在 PSPad 中打开它(一种文本编辑器,我可以在其中查看任何十六进制格式的文件),它告诉我我的文本文件位于UTF-16LE. 因为我是从别人那里得到的,所以很有可能。

现在我的 Java 程序无法处理这种格式。所以我想知道是否有任何方法可以将我的文本文件转换为ASCII格式或进行一些预处理或任何事情?我可以修改文件。

任何帮助是极大的赞赏。

谢谢。

编辑 1

我编写了这个程序,但它没有按预期工作。如果我在 PSPad 中看到输出文件,我可以将每个字符视为 2 字节字符,例如 '2' 是 3200 而不是 32;'M' 是 4D00 而不仅仅是 4D 等。虽然说输出文件的编码是 UTF-8。我在这里有点困惑。谁能告诉我我做错了什么?

public static void main(String[] args) throws Exception {

        try {
            // Open the file that is the first
            // command line parameter
            FileInputStream fstream = new FileInputStream(
                    "input.txt");
            // Get the object of DataInputStream
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in,"UTF-16LE"));
            String strLine;
            // Read File Line By Line
            while ((strLine = br.readLine()) != null) {
                // Write to the file
                writeToFile(strLine);
            }
            // Close the input stream
            in.close();
        } catch (Exception e) {// Catch exception if any
            System.err.println("Error: " + e.getMessage());
        }

        System.out.println("done.");
    }

    static public void writeToFile(String str) {
        try {
            OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("output.txt", true), "UTF-8");
            BufferedWriter fbw = new BufferedWriter(writer);
            fbw.write(str);
            fbw.close();
        } catch (Exception e) {// Catch exception if any
            System.err.println("Error: " + e.getMessage());
        }
    } 

编辑 2

以下是快照:

PSPad 中的输入文件(免费的十六进制查看器)在此处输入图像描述

PSPad 中的输出文件在此处输入图像描述

这是我期望看到的: 在此处输入图像描述

4

3 回答 3

6

为字符集 UTF-16LE 创建一个 InputStreamReader,您将一切就绪。

于 2011-05-31T18:01:47.310 回答
1

InputStreamReader将让您将 UTF-16EL 加载到内存中。然后,您可以执行您需要的所有字符串操作。然后,您可以使用OutputStreamWriter保存为 ASCII 格式。使用CharSet选择格式。

于 2011-05-31T18:13:23.207 回答
0

刚刚找到了解决办法。

http://www.fileformat.info/convert/text/utf2utf.htm

允许您在编码之间上传和转换。

但它不是一个永久的解决方案,因为我的文件是 700MB+。所以我会尝试其他人发布的一些解决方案。

这个小软件有助于:

http://www.kalytta.com/tools.php

于 2011-05-31T18:50:38.103 回答