Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 默认编码和更改_Java_Unicode_Encoding_Utf 8 - Fatal编程技术网

Java 默认编码和更改

Java 默认编码和更改,java,unicode,encoding,utf-8,Java,Unicode,Encoding,Utf 8,默认情况下,Character和String使用UTF-16,但是,出于所有实际目的,在北美和大多数英语地区,UTF-8就足够了(因为它最多可以达到4个字节)。那么,如果我使用InputStreamReader(InputStream),那么它会给我默认的UTF-16char编码吗?使用InputStreamReader(InputStream,“UTF-8”)将提供UTF-8编码,这足以满足我的目的 在使用英语语言环境时,如何将JVM的默认编码自动设置为UTF-8?其目的是提高字符和字符串操作

默认情况下,
Character
String
使用UTF-16,但是,出于所有实际目的,在北美和大多数英语地区,UTF-8就足够了(因为它最多可以达到4个字节)。那么,如果我使用
InputStreamReader(InputStream)
,那么它会给我默认的UTF-16
char
编码吗?使用
InputStreamReader(InputStream,“UTF-8”)
将提供UTF-8编码,这足以满足我的目的

在使用英语语言环境时,如何将JVM的默认编码自动设置为UTF-8?其目的是提高
字符
字符串
操作的性能(使用8位方案而不是16位编码,大多数ASCII使用8位编码,同时符合Unicode标准)

如有任何意见,我们将不胜感激。谢谢

那么,如果我使用InputStreamReader(InputStream),那么它会给我 默认UTF-16字符编码?使用InputStreamReader(InputStream, “UTF-8”)将提供UTF-8编码,这足以满足我的需要 目的

如何在使用时将JVM的默认编码自动设置为UTF-8 英语地区

InputstreamReader
java文档:

InputStreamReader使用的字符集可以通过名称或名称指定 可以显式给定,或者平台的默认字符集可以是 已接受

比如当我尝试使用
reader.getEncoding()
在我的平台上打印时;它打印UTF-8
。Java通过在JVM启动时调用
System.getProperty(“file.encoding”)
来获取字符编码。因此,如果Java没有获得任何file.encoding属性,它将使用
“UTF-8”
字符编码进行所有实际用途。但是,要为JVM实例设置编码,可以使用
System.setProperty(“file.encoding,“UTF-16”)


java中文本、字符、字符和字符串的内存数据类型为UTF-16。绝对地总是。无条件地


唯一可以改变的是Java如何从外部的字节转换为内部的字符。没有办法将表示形式更改为UTF-8,以空间换取时间。

我对实际运行时环境处理字符串的方式不是专家,但我认为不可能更改,除非您希望创建自己的UTF-8字符串类实现。注意:通过向InputStreamReader构造函数提供UTF-8,您不会改变本机java(char)对象和字符串的处理方式,只会改变输入数据的解析方式。无论您如何操作,数据都将作为UTF-16保存在RAM中。@CPUTerminator,谢谢您的宝贵意见。您知道java类文件的编码是什么吗?UTF-8是为了节省空间吗?类文件的“编码”可以通过不同的编译器选项进行更改。如果您使用IDE,它应该在构建属性中的某个位置可用。@CPUTerminator,如果它始终是JAVA的16位本机,那么为了提高效率,在InputStreamReader上设置另一种编码是否有意义?我会理解它在OutputStreamWriter上是有意义的。你的想法!!这不是一件效率的事情。如果输入源采用UTF-16编码,将字符集编码设置为UTF-8将导致解析数据无效。类似地,如果数据是UTF-8,并且您将字符集编码设置为UTF-16,它将尝试将两个不同的字符作为一个符号来读取。输入流的字符编码参数不是可选的,因为它对数据的处理方式有很大的影响,因此这里的基本问题不是效率而是正确性。@b谢谢,谢谢。这很有帮助。转换只用于解析数据,而不是如何保存数据。您知道java类文件的编码是什么吗?UTF-8是为了节省空间吗?如果它总是16位的JAVA本机代码,那么为了提高效率,在InputStreamReader上设置另一种编码是否有意义?我会理解它在OutputStreamWriter上是有意义的。你的想法!!这与效率无关。读卡器编码是告诉它磁盘上字节的格式所必需的。你提出了一个很好的观点。所以,如果我使用您的代码设置系统属性,那么我还需要执行InputStreamReader(InputStream,“UTF-8”)?如果我在程序启动时调用System.setProperty(“file.encoding”,“UTF-8”),那么它是否会成为JVM实例的全局默认值?我还想问你,在设置System.setProperty(“file.encoding”,“UTF-8”)之后,它是唯一的UTF-8数据操作,但实际上,JAVA在本机上会再次使用UTF-16,不管怎样。那么,如果我想使用UTF-32,那么我是否必须再次执行InputStreamReader(InputStream,“UTF-32”)?我认为答案可能是显而易见的,但如果您可以确认1,那将是一个很好的选择问:不,如果您设置了系统属性,您就不必在您设置的JVM实例的读取器构造函数中设置它。问:再次感谢。非常有用的链接。还有一个问题,您知道java类文件的编码是什么吗?是UTF-8节省空间吗?据我所知是“UTF-8”