【发布时间】:2013-10-18 08:35:09
【问题描述】:
默认情况下,Character 和 String 使用 UTF-16,但是,出于所有实际目的,在北美和大多数英语语言环境中,UTF-8 就足够了(因为它最多可以达到 4 个字节)。那么,如果我使用InputStreamReader(InputStream),那么它会给我默认的UTF-16 char 编码吗?使用 InputStreamReader(InputStream, "UTF-8") 将提供 UTF-8 编码,这足以满足我的目的。
如何在使用英语语言环境时将我的 JVM 的默认编码自动设置为 UTF-8?其目的是提高 Character 和 String 操作的性能(通过使用 8 位方案而不是 16 位编码,并且大多数 ASCII 使用 8 位编码覆盖,同时符合 Unicode 标准)。
感谢任何 cmets。谢谢!
【问题讨论】:
-
我不是实际运行时环境处理字符串方式的专家,但我认为不可能改变这一点,除非您希望创建自己的 UTF-8 字符串类实现。 N.B:通过将 UTF-8 提供给 InputStreamReader 构造函数,您不会更改处理本地 java (char) 对象和字符串的方式,您只需更改输入数据的解析方式。无论您如何操作,数据都将以 UTF-16 格式保存在 RAM 中。
-
@CPUTerminator,感谢您的有用评论。你知道java类文件的编码是什么吗?是UTF-8节省空间吗?
-
类文件的“编码”可以通过不同的编译器选项来改变。如果您使用 IDE,它应该在构建属性中的某处可用。
-
@CPUTerminator,如果它始终是 16 位原生 JAVA,那么出于效率目的在 InputStreamReader 上设置另一个编码是否有意义?我会理解它在 OutputStreamWriter 上确实有意义。你的想法!!
-
这不是效率问题。如果您的输入源以 UTF-16 编码,将字符集编码设置为 UTF-8 将导致解析的数据无效。同样,如果数据是 UTF-8 并且您将字符集编码设置为 UTF-16,它将尝试将两个不同的字符作为一个符号读取。输入流的字符编码参数并不是可选的,因为它对如何处理数据有很大的影响,因此这里的基本问题不是效率而是正确性。
标签: java unicode encoding utf-8