java 字符编码

Wesley13
• 阅读 816

1.字符集编码

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
混世魔王 混世魔王
1年前
从数据展示中汉字缺失了解字符编码知识
有人在使用皕杰报表时遇到如下问题:有些汉字变成了“?”,这是为什么呢?实际上就是你用的字符集里没有这个汉字导致的,要想搞懂这个问题,还得从字符、字符集、字符编码说起。所谓字符,就是各种文字和符号的总称。所谓字符集,就是很多字符组成的集合。所谓编码,就是通过
Stella981 Stella981
3年前
CentOS7设置中文字符集
一、字符编码和字符集1、字符编码(characterencoding):字符编码是一种法则,在数字与符号之间建立的对应关系。不同的国家有不同的语言,包含的文字、标点符号、图形符号各有不同。例如在ASCII编码中,用数字97表达字符'a'与字符集相对应,常见的字符编码有AS
Wesley13 Wesley13
3年前
MySQL字符集小结
一:什么是字符集字符集支持多层面:服务器层(server)、数据库层(database)、数据表(table)、字段(column)、连接(connect)、结果集(result)。1.字符集是一套符号和编码规则,字符串必须有相应的字符集。2.校验集是这套符号和编码的校验规则,定义字符排序规则,字符串之间比较的规则。3.非ASCII字
Wesley13 Wesley13
3年前
JS转码与解码
escape和unescapeescape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。采用unicode字符集对指定的字符串除0255以外进行编码。所有的空格符、标点符号、特殊字符以及更多有联系非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表
Wesley13 Wesley13
3年前
JAVA NIO 字符集编码问题
字符集是非英语国家人最头疼的事情,尤其是样样有国标的中国。所以本朝的码农比洋大人程序员学各种技能都要多会一个技能点——应付编码问题。NIO我们同样需要面对编码解码问题。六、字符集:CharSet编码:字符串字节数组解码:字节数组字符串有哪些编码呢?@Testp
Wesley13 Wesley13
3年前
Mysql 字符编码
知识补充:数据库字符编码一、MySQL支持的字符集1.查看所有可用的字符集showcharacterset;或者查看information\_schema.character\_sets,也可以显示所有的字符集和该字符集默认的校队规则2.MySQL的字符集包括字符集(character)和校对规则(collation
Wesley13 Wesley13
3年前
MySQL原理
任何计算机存储数据,都需要字符集,因为计算机存储的数据其实都是二进制编码,将一个个字符,映射到对应的二进制编码的这个映射就是字符编码(字符集)。这些字符如何排序呢?决定字符排序的规则就是排序规则。查看内置字符集与比较规则通过showcharset;命令,可以查看所有的字符集。以下仅展示了我们常用的字符