`

关于file.encoding的设置

 
阅读更多

昨天有人在讨论关于设置System的property,file.encoding修改defaultcharset无效


在java中,如果没有指定charset的时候,比如new String(byte[] bytes),都会调用Charset.defaultCharset()的方法



我们可以清楚的看到defaultCharset是只能被初始化一次,这里还是有点小问题的,在多线程并发调用的时候还是会初始话多次,当然后面都是从cache(lookup的函数)里读出来的,问题也不大。

当我们在改变System.getProperties里的file.encoding 的时候,defaultCharset已经被初始化过了,所以不会在调用初始话的代码。


当jvm 启动的时候,load class, 最后调用main函数之前,defaultCharset已经初始化好,而很多函数里都掉用了这个方法象String.getBytes, 还有InputStreamReader, InputStreamWriter 都是调用了Charset.defaultCharset()的方法,就不去追查谁先调用了defaultCharset。


对defaultCharset,在jvm里的语言就是初始话在启动的时候,而且不可被更改,你只能修改系统的charset,或者jvm的启动参数里加上-Dfile.encoding="UTF-8"


题外话

在java里面String是使用char数组来表示,而java的char和c的char是不同的,java的char是双字节的, 而c 里面的char单字节,等同于java byte

也就是说我们在转化byte 到string的时候,是根据charset decode转化成char, 而我们在调用println,write string的时候,还是要把char最后encode成byte 输出到控制台,或者文件中。

而在最后调用c函数write 的时候,如果是java 的byte数组,还要转化成c 里的char数组








分享到:
评论

相关推荐

    java 中file.encoding的设置详解

    本文将深入探讨`file.encoding`的设置及其在Java中的工作原理。 Java会根据`file.encoding`属性来确定默认的字符集,例如ISO-8859-1或UTF-8。这个属性的值可以在JVM启动时通过命令行参数 `-Dfile.encoding="charset...

    vs FileEncoding插件 2019

    除了基本的编码管理功能,"vs FileEncoding插件"可能还提供了其他实用特性,如自定义编码设置、批量转换文件编码等。这些功能进一步提升了VS作为IDE的完整性和灵活性,使开发者能够更专注于代码编写,而不是编码格式...

    FileEncodingConverter文件编码转换工具

    2. **FileEncodingConverter.suo**:这是Visual Studio用户选项文件,保存了用户特定的设置,如窗口布局、调试器设置等。这个文件通常不包含源代码,而是与.sln文件配合使用,提供个性化的开发环境。 3. **...

    在CentOS上安装Jenkins的详细记录

    将`JAVA_HOME`环境变量设置为Java的安装路径,即`/mnt/md/opt/jdk1.8.0_202`。 4. **启动Jenkins**: 使用以下命令手动启动Jenkins服务: ``` JENKINS_HOME="/mnt/md/opt/jenkins-2.319.3-lts/jenkins_home" \...

    Maven发布Jar包中文乱码解决方法

    3. 在项目的 resource 文件夹下添加一个资源文件 encoding.properties,内容如下: `encoding=UTF-8` 三、详细说明 在 Maven 中,编译和打包过程中使用的字符集是可以配置的。Maven 提供了多种方式来设置字符集,...

    java字符编码转换详细过程

    1. **从`file.encoding`编码到Unicode编码**:当使用JDK中的`javac.exe`编译Java源代码时,如果不显式指定编码方式,编译器会自动检测操作系统默认的`file.encoding`属性,并将其作为源文件的编码格式。例如,在中文...

    UTF-8编码转化(Visual Basic)

    Dim text As String = My.Computer.FileSystem.ReadAllText("file.txt", System.Text.Encoding.UTF8) ``` 3. **写入UTF-8文件**: 当写入UTF-8文件时,可以使用`StreamWriter`类,并指定`UTF8Encoding`对象,...

    一个进行文件编码的jar包

    一个进行文件编码的jar包,使用方式就像jstl一样的,页面进行地址短编码很方便。

    File2Base64.rar

    标题中的"File2Base64.rar"表明这是一个关于将文件转换为Base64编码的项目或工具。在.NET 5框架下,开发人员经常需要在处理文件数据时使用Base64编码,因为这种编码方式可以将二进制数据转换为ASCII字符串,便于在...

    VB.NET 读写 MP3 文件的 ID3v1 信息

    tag.Comment = System.Text.Encoding.ASCII.GetString(tagBytes, 97, 30).TrimEnd ChrW(0) tag.TrackNumber = tagBytes(125) tag.Genre = CType(tagBytes(126), ID3v1Tag.Genre) Return tag End Function ``` ...

    JSP乱码解方案.doc

    但在英文系统环境下,例如LANG设置为en_US的Linux、AIX或Solaris,需要将JVM的`file.encoding`设置为GBK,以防止乱码。 2. **Java编译**:JSP被编译为Java源文件,此过程同样受到`file.encoding`的影响。无论JSP...

    java中文乱码字符集.pdf

    - 设置JVM的`file.encoding`:可以通过启动参数`-Dfile.encoding=UTF-8`来覆盖默认的系统编码。 - 在JSP和Servlet中处理编码:在接收请求参数时,需要进行正确的字符编码转换,例如`new String(request....

    06:File类的常用静态方法.pdf

    Encoding.Default、Encoding.UTF8、Encoding.GetEncoding("GBK") 输出Encoding.GetEncodings(),所有编码。什么是文本文件。拖到记事本中还能看得懂的就是文本文件,doc不是。 File类的常用静态方法: (FileInfo*...

    中文乱码.docx

    对于运行在Tomcat服务器上的Java应用而言,可以通过设置`file.encoding`参数来指定系统的默认文件编码格式为UTF-8,从而避免中文乱码问题的发生。 #### 三、具体实施步骤 ##### 1. Windows环境下的配置方法 在...

    vb.net 读取txt文件的几种方式

    Using reader As New BinaryReader(stream, Encoding.ASCII) While stream.Position < stream.Length Dim byteValue As Byte = reader.ReadByte() If byteValue <> &H0D Then ' 跳过回车符 Console.Write...

    weka 集成LibSVm所需的jar(wlsvm.zip)

    修改cmd_default=javaw -Dfile.encoding=#fileEncoding# -Xmx#maxheap# -classpath "#wekajar#;#cp#" #mainclass# 为cmd_default=javaw -Dfile.encoding=#fileEncoding# -Xmx#maxheap# -classpath "#wekajar#;#cp#;...

    Java字符转换[参照].pdf

    例如,在英文操作系统下,通过添加特定的启动参数,如`-Dclient.encoding.override=GBK -Dfile.encoding=GBK -Duser.language=zh -Duser.region=CN`,可以强制JVM运行在中文环境中。 Java源代码的编译过程,通常会...

    python处理file文件.docx

    with open(file_path, mode='r', encoding='utf-8') as file: # 进行文件操作 ``` 这里`mode`参数可以是: - `'r'`: 读取模式(默认) - `'w'`: 写入模式(覆盖文件内容) - `'a'`: 追加模式(在文件末尾添加内容)...

Global site tag (gtag.js) - Google Analytics