将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.为什么上面的代码段无法进行转换?

提前致谢!!!

@VicJordan发布的答案不正确。 当您调用getBytes() ,您将获得在系统的本机字符编码 (可能是也可能不是UTF-8) 下编码的字符串的原始字节。 然后,您将这些字节视为UTF-8编码,它们可能不是。

更可靠的方法是将Shift_JIS文件读入Java String。 然后,使用UTF-8编码写出Java String。

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