• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > java 中file.encoding的设置详解

java 中file.encoding的设置详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了java file.encoding,file encoding,text file encoding,file encoding 65001,fileencoding utf 8等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

java 中file.encoding的设置详解

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

Properties pps=System.getProperties(); 
pps.setProperty("file.encoding","ISO-8859-1"); 
</div>

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

public static Charset defaultCharset() { 
    if (defaultCharset == null) { 
    synchronized (Charset.class) { 
    java.security.PrivilegedAction pa = 
      new GetPropertyAction("file.encoding"); 
    String csn = (String)AccessController.doPrivileged(pa); 
    Charset cs = lookup(csn); 
    if (cs != null) 
      defaultCharset = cs; 
        else  
      defaultCharset = forName("UTF-8"); 
      } 
  } 
  return defaultCharset; 
  } 
</div>

我们可以清楚的看到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数组

(*env)->GetByteArrayRegion(env, bytes, off, len, (jbyte *)buf); 
</div>

感谢阅读,希望能帮助到大家,谢谢大家,对本站的支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • java 中file.encoding的设置详解
  • java 中file.encoding的设置详解

相关文章

  • 2017-05-28Java集合删除元素ArrayList实例详解
  • 2017-08-17Java监控工具、调优、调试辅助函数
  • 2017-05-28Spring boot 跳转到jsp页面的实现方法
  • 2017-05-28详解Spring MVC4 纯注解配置教程
  • 2017-05-28Java微信二次开发(二) Java微信文本消息接口请求与发送
  • 2017-05-28序列化版本号serialVersionUID的作用_动力节点Java学院整理
  • 2017-05-28SpringBoot下的值注入(推荐)
  • 2017-05-28Java微信公众号开发之通过微信公众号获取用户信息
  • 2017-05-28java回调机制实例详解
  • 2017-05-28Spring3 MVC请求参数获取的几种方法小结

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 详解eclipse下创建第一个spring boot项目
    • Spring Data JPA调用存储过程实例代码
    • java中Serializable接口作用详解
    • 实例解析Java设计模式编程中的适配器模式使用
    • Java 选择排序、插入排序、希尔算法实例详解
    • Java微信公众平台开发(5) 文本及图文消息回复的实现
    • log4j的Appenders配置方法
    • spring boot(一)之入门篇
    • Java多线程基础 线程的等待与唤醒(wait、notify、notifyAll)
    • java数据结构与算法之希尔排序详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有