Я пытаюсь преобразовать текстовый файл UTF-8 в Windows-1250. Я использую API Java 6.
Я использовал код ниже, но результат, безусловно, не 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 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();
}