文档章节

java 字符编码

上官无筵
 上官无筵
发布于 2013/06/28 15:25
字数 474
阅读 363
收藏 0

1.字符集编码<br/>

    JDK1.6APi中提供的字符串构造方法有指定编码字符集和系统默认编码字符集两类。对于指定编码字符集来说,很好理解。默认编码字符集中描述如下:

    Constructs a new String by decoding the specified array of bytes using the platform's default charset.

    没有指定字符编码的字符串会按照“平台默认编码”进行构造。这里的平台是指运行时的jvm环境。

    平台默认的编码可以通过以下方式获取:Charset.defaultCharset()。改方法内容如下:

<!-- lang: java -->
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;
}

    这里的defaultCharset指定的编码就是不指定编码格式时创建字符串的编码。defaultCharset的值是根据环境变量"file.encoding"获取。可以通过设置将JVM启动参数: -Dfile.encoding=GBK的方式来指定默认编码。当file.encoding参数没有设置时,jvm会获取当前操作系统的默认编码作为jvm默认编码。

    在java程序中可以通过System.setProperty("file.encoding", "GBK")修改该参数的值,但修改的编码不会改变Charset.defaultCharset()的取值。因为defaultCharset定义如下:

    private static volatile Charset defaultCharset;

    修改某个字符串编码方式如下:

    String str = "字符"; String newStr = new String(str.getBytes("gbk"), "gbk");直接使用String newStr = new String(str.getBytes(), "gbk");当默认编码格式不是gbk时会产生乱码。

2.输入输出流编码

    操作同一个文件时,写文件使用的编码必须和读文件使用的编码一致。

    在java.io包中操作流的工具类在没有指定编码时都使用了“平台默认编码”,如果该默认编码与创建文件时的编码不一致,读入的中文将会乱码,英文不乱码。

© 著作权归作者所有

上一篇: XStream使用总结
下一篇: java位运算
上官无筵
粉丝 1
博文 9
码字总数 2454
作品 0
深圳
程序员
私信 提问
java双字节编码和项目编码格式的理解

在Java中字符仅以一种形式存在,那就是Unicode(不选择任何特定的编码,直接使用他们在字符集中的编号,这是统一的唯一方法)。由于java采用unicode编码,char 在java中占2个字节。2个字节(...

踏破铁鞋无觅处
2018/08/29
1
0
这是一个关于maven项目的问题,碰到过很多类似的情况有谁可以帮忙解释下

[INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 1 resource [INFO] [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ vcm --- [WARNING] F......

海_风
2013/09/18
6.5K
11
Java中的字符集编码入门(五)

如果你是JVM的设计者,让你来决定JVM中所有字符的表示形式,你会不会允许使用各种编码方式的字符并存? 我想你的答案是不会,如果在内存中的Java字符可以以GB2312,UTF-16,BIG5等各种编码形...

Java开发者
2010/05/05
165
0
[转] Java 平台中的增补字符

作者:Sun Microsystems, Inc. 的 Norbert Lindenberg 和 Masayoshi Okutsu 摘要 本文介绍 Java 平台支持增补字符的方式。增补字符是 Unicode 标准中代码点超出 U+FFFF 的字符,因此它们无法...

红薯
2010/10/27
673
1
MenuItem 显示中文乱码问题解决方案

MenuItem 显示中文乱码问题解决方案 今天在使用Java做系统托盘图标(TrayIcon),需要为其增加一个右键弹出菜单(PopupMenu),在使用菜单项(MenuItem)时,遇到了一个非常痛苦的事情:中文乱码~...

Java编程思想
2013/10/17
518
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
9
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
9
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
9
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部