Java: как преобразовать файл в utf8
У меня есть файл с некоторыми не-utf8-символами (например, "ISO-8859-1" ), и поэтому я хочу преобразовать этот файл (или прочитать) в кодировку UTF8, как я могу это сделать?
Код выглядит следующим образом:
File file = new File("some_file_with_non_utf8_characters.txt");
/* some code to convert the file to an utf8 file */
...
edit: Поместите пример кодирования
Ответы
Ответ 1
String charset = "ISO-8859-1"; // or what corresponds
BufferedReader in = new BufferedReader(
new InputStreamReader (new FileInputStream(file), charset));
String line;
while( (line = in.readLine()) != null) {
....
}
Там вы декодировали текст. Вы можете записать его с помощью симметричных методов Writer/OutputStream с предпочтительной кодировкой (например, UTF-8).
Ответ 2
Следующий код преобразует файл из srcEncoding в tgtEncoding:
public static void transform(File source, String srcEncoding, File target, String tgtEncoding) throws IOException {
BufferedReader br = null;
BufferedWriter bw = null;
try{
br = new BufferedReader(new InputStreamReader(new FileInputStream(source),srcEncoding));
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(target), tgtEncoding));
char[] buffer = new char[16384];
int read;
while ((read = br.read(buffer)) != -1)
bw.write(buffer, 0, read);
} finally {
try {
if (br != null)
br.close();
} finally {
if (bw != null)
bw.close();
}
}
}
- EDIT -
Использование Try-with-resources (Java 7):
public static void transform(File source, String srcEncoding, File target, String tgtEncoding) throws IOException {
try (
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(source), srcEncoding));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(target), tgtEncoding)); ) {
char[] buffer = new char[16384];
int read;
while ((read = br.read(buffer)) != -1)
bw.write(buffer, 0, read);
}
}
Ответ 3
Вам нужно знать кодировку входного файла. Например, если файл находится на латинице-1, вы бы сделали что-то вроде этого,
FileInputStream fis = new FileInputStream("test.in");
InputStreamReader isr = new InputStreamReader(fis, "ISO-8859-1");
Reader in = new BufferedReader(isr);
FileOutputStream fos = new FileOutputStream("test.out");
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
Writer out = new BufferedWriter(osw);
int ch;
while ((ch = in.read()) > -1) {
out.write(ch);
}
out.close();
in.close();
Ответ 4
Вы хотите только прочитать его как UTF-8?
То, что я недавно дал с подобной проблемой, - это запустить JVM с -Dfile.encoding = UTF-8 и читать/печатать как обычно. Я не знаю, применимо ли это в вашем случае.
С помощью этой опции:
System.out.println("á é í ó ú")
правильно печатает символы. В противном случае он печатает? Символ