编码何时与 Java 相关?

When is encoding being relevant in Java?

这可能是一个有点新手的问题,但考虑到 Java 中的调试编码,它是相当相关的:什么时候编码与 String 对象相关?

假设我有一个要保存到文件的字符串对象。字符串对象本身是否使用我应该操作的某种编码,或者这种编码只会在我创建要保存的字节流时通知

这同样适用于导入:当我打开一个文件并获取它的字节时,我假设手边没有编码,只有字节。当我将这些字节解析为字符串时,我必须使用编码来了解它们是什么字符。 在我解析这些字节后,字符串(在内存中)有某种带有编码的元信息,或者这只是由 JVM 处理?

考虑到我遇到文件 import/export 问题,这一点很重要,我明白了我应该在什么时候担心获得正确的编码。

希望我解释清楚我的疑惑,先谢谢了!

Java 字符串没有明确的编码信息。他们不知道自己从哪里来,也不知道要去哪里。所有 Java 字符串都在内部存储为 UTF-16。

您(可选)指定要将字符串转换为字节序列(例如,保存到文件)或转换字节序列(例如,读取从一个文件)转换成一个字符串。

当您 de/serializing 来自磁盘或网络时,编码对字符串很重要。文本文件格式有多种:ascii、latin-1、utf-8/16(我相信可能有两种utf-16格式,但我不是100%)

请参阅 InputStreamReader 了解如何从以非默认格式编码的文本中加载字符串