为什么GBK编码的文件与UTF-8文本相同?



我使用InputStreamReader读取GBK编码文本,我认为linetext也将是GBK编码的,但是当我比较WGS 84/UTM区域44n &;用UTF-8编码,它们是一样的。

下面是代码:

1, s是UTF-8编码的字符串

2, linetext是GBK编码的字符串(我不确定,但我知道"read"是GBK)

3,我猜linetext = bufferedReader.readLine()"触发一个转换如果编码,不确定。

try (InputStreamReader read = new InputStreamReader(new FileInputStream(file), ENCODING_GBK);
BufferedReader bufferedReader = new BufferedReader(read)) {
String lineTxt;
while ((lineTxt = bufferedReader.readLine()) != null) {
if (lineTxt.contains("WGS 84 / UTM zone 44N")) {
String s = new String("输出坐标系:WGS 84 / UTM zone 44N".getBytes(), StandardCharsets.UTF_8);
System.out.println(System.getProperty("file.encoding"));
System.out.println(Arrays.toString(s.getBytes()));
System.out.println(Arrays.toString(lineTxt.getBytes()));
}
}
} catch (IOException e) {
log.error("Read file failed");
e.printStackTrace();
}

当读取文件并将行存储为String对象时,编码将转换为String的内部表示形式(UTF-16)。lineTxt.getBytes()将UTF-16字符串转换为平台默认编码的字节数组(这取决于Windows上的系统区域设置)。当您在其他平台上时,它将是UTF-8)。

如果您想将文件的内容转换为字节数组(获取GBK表示而不想将内容转换为UTF-16),请像这样读取文件:

try {
File file = new File("C:\tmp\fileGBK.txt");
byte[] lineTxt = Files.readAllBytes(file.toPath());
System.out.println(Arrays.toString(lineTxt));
} catch (IOException e) {
e.printStackTrace();
}

您将得到以GBK ([-54, -28, -77, -10, -41, ...)表示的字符串。

如果您想从文件中逐行读取,并获得行的GBK表示:

File file = new File("C:\tmp\fileGBK.txt");
final Charset ENCODING_GBK = Charset.forName("GBK");
try (InputStreamReader read = new InputStreamReader(new FileInputStream(file), ENCODING_GBK);
BufferedReader bufferedReader = new BufferedReader(read)) {
String lineTxt;
while ((lineTxt = bufferedReader.readLine()) != null) {
if (lineTxt.contains("WGS 84 / UTM zone 44N")) {
String s = new String("输出坐标系:WGS 84 / UTM zone 44N".getBytes(), StandardCharsets.UTF_8);
System.out.println(System.getProperty("file.encoding"));
System.out.println(Arrays.toString(s.getBytes()));
System.out.println(Arrays.toString(lineTxt.getBytes(ENCODING_GBK)));
}
}
} catch (IOException e) {
e.printStackTrace();
}

相关内容

  • 没有找到相关文章