2016-10-12 14 views
0

Я пытаюсь преобразовать форматированный файл Shift_JIS в формат UTF-8. Для этого, ниже мой подход:Преобразование формата Shift_JIS в формат UTF-8

  1. прочитанной Shift_JIS файл
  2. GetBytes каждой строки и преобразовать его в UTF-8
  3. Создать новый файл и записать UTF-8 преобразуется значение ему

Проблема в том, что на этапе 2 конверсия не происходит. Я использую ниже код для преобразования Shift_JIS в UTF-8:

InputStream inputStream = getContentResolver().openInputStream(uri); 
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
    byte[] b = line.getBytes("Shift_JIS"); 
    String value = new String(b, "UTF-8"); 

Пожалуйста, дайте мне знать, если требуется любая другая информация.

У меня есть ниже 2 вопросы:

1. Есть ли еще лучший способ (шаги), чтобы сделать это преобразование?

2. Почему надстрочный фрагмент кода не работает для преобразования?

Заранее благодарен!

ответ

2

Ответ на сообщение @VicJordan неверен. Когда вы вызываете getBytes(), вы получаете необработанные байты строки , закодированные под собственной кодировкой символов вашей системы (что может быть или не быть UTF-8). Затем вы обрабатываете эти байты, как если бы они были закодированы в UTF-8, чего они могут не быть.

Более надежным подходом было бы прочитать файл Shift_JIS в Java String. Затем выпишите строку Java, используя кодировку UTF-8.

InputStream in = ... 
Reader reader = new InputStreamReader(in, "Shift_JIS"); 
StringBuilder sb = new StringBuilder(); 
int read; 
while ((read = reader.read()) != -1){ 
    sb.append((char)read); 
} 
reader.close(); 

String string = sb.toString(); 

OutputStream out = ... 
Writer writer = new OutputStreamWriter(out, "UTF-8"); 
writer.write(string); 
writer.close(); 
+0

Большое спасибо. Это имеет смысл – VicJordan

0

Наконец-то я нашел решение. Проделал очень большую ошибку. Ниже код работает прекрасно:

InputStream inputStream = getContentResolver().openInputStream(uri); 
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "Shift_JIS")); 
byte[] b = line.getBytes(); 
String value = new String(b, "UTF-8"); 
0

Если вы хотите скопировать входной_файл (Shift_JIS) в Outfile (UTF-8).

try (Reader reader = new InputStreamReader(new FileInputStream(inFile), "Shift_JIS"); 
    Writer writer = new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8")) { 
    char[] buffer = new char[4096]; 
    int size; 
    while ((size = reader.read(buffer)) >= 0) 
     writer.write(buffer, 0, size); 
}