如何使用Java处理UTF-16LE编码的文本文件?或将其转换为ASCII?

时间:2011-05-31 17:54:51

标签: java character-encoding utf-16le

如果有人问过我很抱歉。我正在尝试使用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中的输入文件(免费的十六进制查看器)enter image description here

PSPad enter image description here

中的输出文件

这是我期待看到的: enter image description here

3 个答案:

答案 0 :(得分:6)

为charset UTF-16LE创建一个InputStreamReader,你就可以了。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

刚刚找到解决方案。

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

允许您上传和转换编码。

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

这个小软件有助于:

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