Intereting Posts

Преобразование формата 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. Почему выше fragment кода не работает для преобразования?

Заранее спасибо!!!

Ответ @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(); 

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

 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"); 

Если вы хотите скопировать inFile (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); }