Java 将 UTF-8 文本文件转换为 Cp1250

标签 java utf-8 codepages cp1250

我正在尝试将 UTF-8 文本文件转换为 Windows-1250。 我正在使用 Java 6 API。

我使用了下面的代码,但结果绝对不是 Cp1250。

import java.io.*; 

public class testing {
    public static void main (String[] args) throws IOException {   

        InputStream  input = null;
        OutputStreamWriter output = null;   

        File destinationFile = new File("C:\\test\\Cp1250.txt");   

        try {      
            input = new FileInputStream("C:\\test\\utf-8.txt");
            output = new OutputStreamWriter(new FileOutputStream(destinationFile), "Windows-1250");

            while (input.read() != -1) {
                output.write(input.read());
            }

        } catch (Exception e) {
            e.printStackTrace(); 
        } finally {
            input.close();
            output.close(); 
        }      
    }
}

最佳答案

您需要一个 InputStreamReader,它知道来自 FileInputStream 的数据必须使用 UTF-8 字符集进行解释。

这是一个例子。为简洁起见,我省略了资源的关闭。

    FileInputStream input = new FileInputStream(file);
    InputStreamReader reader = new InputStreamReader(input, "utf-8");
    FileOutputStream output = new FileOutputStream(destinationFile);
    OutputStreamWriter writer = new OutputStreamWriter(output, "Windows-1250");

    int read = reader.read();
    while (read != -1)
    {
        writer.write(read);
        read = reader.read();
    }

还有一件事:在您的 while 循环中,您有两次调用 input.read,但您只调用了一次 output.write()。这意味着您只写入已读取字节的一半。

关于Java 将 UTF-8 文本文件转换为 Cp1250,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22383333/

相关文章:

java - 错误: Illegal modifier for parameter

java - while 循环条件如何再次重新评估

asp.net-mvc - 如何在 C# 中使用带有 BOM 的 UTF8 编码 GetBytes()?

c# - 无法使用 UTF8 编码转换 HttpResponseMessage

c - 如何禁用字符代码 178 (0xB2) (²) 、179 (0xB3) (³) 和 185 (0xB9) (¹) 作为数字?

Windows 上的 Java Unicode 问题

java - 使用 Arc2D 创建的 java.awt.Shape 中负边界坐标的含义

java - App Engine Java JDO 中的单元测试 XG 跨组事务

xml - 如何设置log4j 2.3版编码

assembly - 如何在 DOS/Asembler 中获取字母字符 (α)?