2013-03-13 4 views
1

У меня есть файл с китайскими символами внутри, я хочу скопировать их в другой файл. Но выход файла беспорядочен с китайскими персонажами. Обратите внимание на то, что в моем коде я использую «UTF8», как мой кодирования уже:Запись китайских символов из одного файла в другой

BufferedReader br = new BufferedReader(new FileReader(inputXml)); 
StringBuilder sb = new StringBuilder(); 
String line = br.readLine(); 
while (line != null) { 
sb.append(line); 
sb.append("\n"); 
line = br.readLine(); 
} 
String everythingUpdate = sb.toString(); 

Writer out = new BufferedWriter(new OutputStreamWriter(
     new FileOutputStream(outputXml), "UTF8")); 

out.write(""); 
out.write(everythingUpdate); 
out.flush(); 
out.close(); 
+2

ли ваш входной файл в кодировке UTF-8? Использовал ли FileReader UTF-8 при проверке getEncoding()? Как вы проверили вывод, поддерживал ли ваш просмотрщик текста UTF-8? – gerrytan

+2

Прочитайте входной файл, используя кодировку, которую он использует. Вы можете проверить кодировку файла во многих редакторах. – longhua

ответ

2

Вы не должны использовать FileReader в случае, как это, так как она не позволяет указать входной кодировку. Постройте InputStreamReader на FileInputStream.

Что-то вроде этого:

BufferedReader br = 
     new BufferedReader(
      new InputStreamReader(
       new FileInputStream(inputXml), 
       "UTF8")); 
3

Ответ от @hyde действителен, но у меня есть две дополнительные примечания, которые я укажу в коде ниже.

Конечно, это до вас, чтобы реорганизовать код для ваших нужд

// Try with resource is used here to guarantee that the IO resources are properly closed 
// Your code does not do that properly, the input part is not closed at all 
// the output an in case of an exception, will not be closed as well 
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(inputXML), "UTF-8")); 
    PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(outputXML), "UTF8"))) { 
    String line = reader.readLine(); 

    while (line != null) { 
    out.println(""); 
    out.println(line); 

    // It is highly recommended to use the line separator and other such 
    // properties according to your host, so using System.getProperty("line.separator") 
    // will guarantee that you are using the proper line separator for your host 
    out.println(System.getProperty("line.separator")); 
    line = reader.readLine(); 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
Смежные вопросы