时间:2021-05-19
为什么写这个
至于为什么要写这个,主要是一句mmp一定要讲,绕了一上午,晕死
Java程序中的中文乱码问题一直是一个困扰程序员的难题,自己也不例外,早在做项目时就遇到过很多编码方式的坑,当时想填来着,但是嫌麻烦。这次终于忍不住了,一定要弄个明白
String类型的编码方式
从网上查的资料都说,Java默认的字符编码是Unicode,而String类型的编码方式是与JVM编码方式和本机操作系统默认字符集有关的。于是我做出了测试
在Java中可以这样显示查看本地编码方式(JVM还是OS呢?)
看注释上说是获取系统字符集,但是我对这个系统的概念表示存疑,为什么呢,因为众所周知,我们中国人的电脑大部分默认的字符编码方式就是GBK,在CMD中输入chcp可以获得一个数值936,这就表示了是GBK的编码方式。
但是我自己运行出这句话的结果竟然是UTF-8,我是在IDEA中运行的,并且已经使用IDEA设置了项目的编码方式是UTF-8,出现这样的结果我只能是猜测其实上面这句话是获取JVM(跟随项目的编码方式)的编码方式
接下来我们来回归正题,String类型的默认编码方式是什么,有下面这几句语句:
下面来看一下运行结果:
// 1.
hhhh ty����%shfu�����ʮ��uif�ڷ�NSF��i����ظ���u��Ϊ��ؼu ��δ���δ��� hhhh ty智障%shfu摸淑芬十分uif内服NSF黑i飞鸟回复额u发为呢丶u 房未婚夫未婚夫
// 2.
hhhh ty智障%shfu摸淑芬十分uif内服NSF黑i飞鸟回复额u发为呢丶u 房未婚夫未婚夫
可以很明显的可以看出,这里String类型默认的字符编码方式就是与我们查看本地系统的编码方式相同。因此我们得出结论:String类型的默认编码方式是和本地编码方式相关
String.getBytes()方法
我们大多数情况下是不使用String类型的,而是使用byte数组来传输操作数据,一般会使用String.getBytes()方法来将字符串转换成字节数组。但是这样转换的时候,会不会牵涉到编码问题呢?仔细查看了String.getBytes()的源码,分为无参的和有参的两种:
综上,在这里再强调一下,因为修改了项目的编码方式,导致了本地系统的编码方式也变成了UTF-8,所以上述的实验都是基于IDE修改了工程项目编码方式的基础上
ByteBuffer与byte数组的互相转换
在NIO中,一般都是使用ByteBuffer来当作字符缓冲,而有的时候我们只有byte[]数组,所以是需要它们之间进行相互转换的
So
综上所述,再在这里总结一下:
小总结
搞清楚了这些甚是豁然开朗,其实很多时候中文的乱码问题根源就是编码方式与解码方式不一致,或者是不同编码方式之间转换时造成了bit损失。所以我们还是要注意规范化编码与解码方式,毕竟有的转换操作是不可逆的。
以上所述是小编给大家介绍的Java中String类型与默认字符编码详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
encode()方法返回字符串的编码版本。默认编码是当前的默认字符串编码。可给予设置不同的错误处理机制。语法以下是encode()方法的语法:str.encod
以java为例,vbchar和string的区别是: 1、类型不同:vbchar是字符类型,String是字符串类型。 2、包含不同:String字符串是用
本文实例讲述了Java中char数组(字符数组)与字符串String类型的转换方法。分享给大家供大家参考,具体如下:在Java语言编程时,使用“口令字段“jPa
以java为例,char和string的区别如下: 1、类型不同。char是字符类型,String是字符串类型。 2、包含。String字符串是用来包含串的
在程序开发中字符串无处不在,如用户登陆时输入的用户名、密码等使用的就是字符串。在Java中,字符串被作为String类型的对象处理。String类位于java.