0

我正在尝试将 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");

如果需要任何其他信息,请告诉我。

我有以下两个问题

1.有没有其他更好的方法(步骤)来做这个转换?

2. 为什么上面的代码片段不能转换?

提前致谢!!!

4

3 回答 3

3

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

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

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();
于 2016-10-16T13:24:41.910 回答
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");
于 2016-10-14T07:32:16.160 回答
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);
}
于 2016-10-14T08:27:50.140 回答