我正在尝试将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();
}
}
}
答案 0 :(得分:4)
您需要一个InputStreamReader,它知道必须使用UTF-8字符集解释来自FileInputStream的数据。
这是一个例子。为简洁起见,我省略了资源的关闭。
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()。这意味着您只能写出已读取的一半字节。
答案 1 :(得分:1)
使用Java 7时,如何执行此操作:
final Path src = Paths.get("C:\\test\\utf-8.txt");
final Path dst = Paths.get("C:\\test\\Cp1250.txt");
try (
BufferedReader reader = Files.newBufferedReader(src, StandardCharsets.UTF_8);
BufferedWriter writer = Files.newBufferedWriter(dst,
Charset.forName("windows-1252"));
) {
String line;
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.newLine();
}
writer.flush();
}