将Shift_JIS格式转换为UTF-8格式

时间:2016-10-12 06:44:32

标签: java android utf-8 vcf shift-jis

我正在尝试将Shift_JIS格式的文件转换为UTF-8格式。为此,下面是我的方法:

  1. 阅读Shift_JIS文件
  2. 每行的getBytes并将其转换为UTF-8
  3. 创建新文件并将UTF-8转换后的值写入
  4. 问题是在第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。为什么上面的代码段无法进行转换?

    提前致谢!!!

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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");

答案 2 :(得分:0)

如果要将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);
}