Java getBytes字符集问题
今天工作中又一次遇到了java字符集问题,这次是由getBytes方法导致的。
以前的时候,曾经很多次的解决过java字符集以及乱码的问题,以为对这块很了解了,至到今天的又一次深入的学习,才发现以前的认识当中存在的问题,下次就getBytes方法在应用级别进行比较实际的解释。
1、Unicode是一种编码规范,是为解决全球字符通用编码而设计的,而rUTF-8,UTF-16等是这种规范的一种实现。
2、java内部采用Unicode编码规范,也就是支持多语言的,具体采用的UTF-16编码方式。
3、不管程序过程中用到了gbk,iso8859-1等格式,在存储与传递的过程中实际传递的都是Unicode编码的数据,要想接收到的值不出现乱码,就要保证传过去的时候用的是A编码,接收的时候也用A编码来转换接收。
4、如果双方的file.encoding确保都相同,那就省事了,都默认转了,但往往在不同项目交互时很多时候是不一致的,这个时候是必须要进行编码转换的。
5、无论如论转换,java程序的数据都是要先和Unicode做转换,这样也就是能处理多语言字符集的原因了。底层保持了一致,只要在传值和接值的时候也一致就肯定不会出现乱码了。
6、在看懂以上5点之后,请参考demo示例如下:
//Demo.java 该java文件编码方式为UTF-8
package test;
public class Demo {
public static void main(String args[])throws Exception {
String str = "中文字符";
System.out.println("original string---" + str);// 会正常输出原始串
/**
* str.getBytes();//如果括号中不写charset,则采用的是Sytem.getProperty("file.encoding"),即当前文件的编码方式,
* 很多人写的是系统的默认编码,通过代码测试并非如此,实际得到的是文件的编码方式*
*
* str.getBytes("charset");//指定charset,即将底层存储的Unicode码解析为charset编码格式的字节数组方式
*
* String new_str=new String(str.getBytes("utf-8"),"gbk"));
* //将已经解析出来的字节数据转化为gbk编码格式的字符串,在内存中即为gbk格式的字节数组转为Unicode去交互传递
*/
String new_str = new String(str.getBytes("utf-8"), "gbk");
/**
* 此时的输出是乱码,在UTF-8的file.encoding下输出gbk格式的数据肯定是乱码,但是new_str的确是gbk编码式的
* 此时的乱码源于encoding不符,但gbk格式的new_str本身数据并没有问题,通过下面的转换也可以看得出来
*/
System.out.println("new string----" + new_str);
String final_str = new String(new_str.getBytes("gbk"), "utf-8");//此处的含意与最上边的注释是一致的参数含意
/**
*输出是正常的,此时将gbk编码格式的new_str字符串,用gbk这个charset去解析它,然后用utf-8再转码一次,
因为new_str确实是gbk格式的,才能经过utf-8编码得到正常的数据显示。
*/
System.out.println("final string---"+final_str);
}
}
仅为今天个人学习所得,若有不足,敬请交流
转载于:https://www.cnblogs.com/asher/p/3307334.html
Java getBytes字符集问题相关推荐
- JAVA中字符集详解
java虚拟机默认的编码是unicode指的是内存中的编码是unicode,而进行io(包括网络和硬盘)传输时另外编码,通过 System.getProperty("file.encodin ...
- java 默认字符集 iso_第二篇:JAVA字符编码系列二:Unicode,ISO-8859-1,GBK,UTF-8编码及......
1.函数介绍 在Java中,字符串用统一的Unicode编码,每个字符占用两个字节,与编码有关的两个主要函数为: 1)将字符串用指定的编码集合解析成字节数组,完成Unicode-〉charsetNam ...
- Java正则表达式--字符集范围:并集、交集和差集
Java正则表达式教程: http://www.java3z.com/cwbwebhome/article/article8/Regex/Java.Regex.Tutorial.html 其中第三章中 ...
- java getbytes 长度_JAVA中的getBytes()方法
在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组.这个表示在不同情况下,返回的东西不一样! String.getBytes(String decode)方 ...
- java转换字符集_Java字符集转换解释
Iso8859-1是西方国家频繁使用的字符编码格式.用iso8859-1编码unicode码中的东方字库部分的字符时统统编码成??,也就是说:用iso8859-1编码unicode码时信息会有损失.但 ...
- 6.JAVA NIO 字符集
第六章 字符集 我们生活在一个变化莫测的世界中.甚至在这个我们称之为地球的平凡的 M 级行星 上,我们也使用数百种不同的语言.在<The Hitchhikers Guide to the Gal ...
- java 默认字符集 iso_当服务器的默认字符集是UTF-8时,Perl并使用ISO-8859-1字符集...
我的网络服务器是Apache,它的默认字符集是UTF-8 . 我有一个简单的HTML页面(没有与charset相关的元标记),它有一个超链接 . Ällä 我还有一个CGI / Perl脚本 . 我想 ...
- Java面试宝典,java指定字符集
第一个:Alibaba[搜索推荐] 一面:算法题:长度为n的数组里放了n+1个大小在[1,n]的数,必然至少有一个重复的数,找出来 二面:概率题:求一根绳子被切两刀能组成一个三角形的概率. 三面主管面 ...
- Java字符串:getBytes() 方法
Java getBytes() 方法 getBytes() 方法有两种形式: getBytes(String charsetName): 使用指定的字符集将字符串编码为 byte 序列,并将结果存储到 ...
最新文章
- linux 别名管理,Linux 的 15 个命令行别名, 帮系统管理员提升工作效率!
- 如何优化Spring Cloud微服务注册中心架构?
- sample,batch和epoch都是啥意思??
- Hadoop文件系统常用命令
- Boosted Tree:一篇很有见识的文章
- hazelcast集群配置_使用HazelCast进行Hibernate缓存:基本配置
- mipi 调试经验【转】
- 创新高!韩国反垄断部门重罚高通8.54亿美元
- 仓储“云服务”初创公司 Clutter获得 6500 万美元 C 轮融资
- 软硬负载之间的对比及优缺点
- 目标检测的模型集成方法及实验
- JAVA前后端分离项目脚手架
- 漫漫人生录 | 小圈子 | 别让自己“墙”了自己
- 数字验证码识别完成自动化登录
- 六种c++计时器函数(秒级到微妙级)
- JavaScript编程实用方法参考
- 基于SOCAT工具的UDP消息通信
- R语言|冗余分析(RDA)到底如何应用?如何在R语言中实现?
- 如何用企业微信、飞书等扫码登录 Office 365
- mybatis逆向工程使用的建议
热门文章
- ActiveMQ(li)
- [置顶]一步步构建大型网站架构
- 转:Flash 插件面板 DragonBonesDesignPanel 的绿色安装方法
- 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(一)
- C#Winform+WindowsAPI做个剪贴板无缝自动保存器(视频截图利器)
- 编程珠玑:对DAO层的一点修改
- ThinkPad -- Intel 无线网卡网络连接方法限制及无法用 Fn + F5 控制的问题
- 如何使用Create-React-App和自定义服务人员构建PWA
- 干货,Wireshark使用技巧-过滤规则
- redis最大储存512m_redis系列篇01