Java: как конвертировать файл в UTF8 - PullRequest
12 голосов
/ 11 июня 2010

У меня есть файл с некоторыми символами не-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: поставить пример кодировки

Ответы [ 4 ]

17 голосов
/ 11 июня 2010

Следующий код преобразует файл из 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);
    } 
}
10 голосов
/ 11 июня 2010
  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).

5 голосов
/ 11 июня 2010

Вам необходимо знать кодировку входного файла.Например, если файл на латинице-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();
1 голос
/ 11 июня 2010

Вы хотите читать только как UTF-8? Недавно я столкнулся с похожей проблемой: запустить JVM с -Dfile.encoding = UTF-8 и читать / печатать как обычно Я не знаю, применимо ли это в вашем случае.

С этой опцией:

System.out.println("á é í ó ú")

правильно печатает символы. Иначе это печатает? Символ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...