加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

老生常谈计算机中的编码问题(必看篇)

发布时间:2020-03-13 02:55:36 所属栏目:安全 来源:站长网
导读:下面小编就为大家带来一篇老生常谈计算机中的编码问题(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

通过查看项目的默认编码为

老生常谈计算机中的编码问题(必看篇)

GBK

如果不想用项目默认的编码格式,可以用下面这种方法指定字符串转化为想要的编码格式:

byte[] bytes2=s.getBytes("utf-8");//转换成utf-8编码 for(byte b: bytes2) //toHexString这个函数是把字节(转换成了Int)以16进制的方式显示 System.out.print(Integer.toHexString(b & 0xff)+" ");// & 0xff是为了把前面的24个0去掉只留下后八位 System.out.println(); byte[] bytes3=s.getBytes("utf-16be");//转换成java双字节编码,utf-16be编码 for(byte b: bytes3) //toHexString这个函数是把字节(转换成了Int)以16进制的方式显示 System.out.print(Integer.toHexString(b & 0xff)+" ");// & 0xff是为了把前面的24个0去掉只留下后八位

运行结果:

老生常谈计算机中的编码问题(必看篇)

分析:两个结果对比可以得出,

gbk编码:中文占用两个字节,英文占用一个字节。

utf-8编码:中文占用三个字节,英文占用一个字节。

utf-16be编码:中文占用两个字节,英文占用两个字节。

注意:java是双字节编码,是utf-16be编码。即java中的一个字符(char)占用两个字节!

2、字节序列转为字符串

当你的字节序列是某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码。

String str1=new String(bytes1);//这时会使用项目默认的编码来转换,可能出现乱码 System.out.println(str1); String str2=new String(bytes2); System.out.println(str2); String str3=new String(bytes2,"utf-8"); System.out.println(str3);

运行结果:

老生常谈计算机中的编码问题(必看篇)

四、文本文件(txt)的编码问题

文本文件就是字节序列,可以是任意编码的字节序列。

如果我们在中文机器上直接创建文本文件,那么该文件只认识ANSI编码(例如直接在电脑中右键创建文本文件)。

这里要注意:只有直接创建文本文件时,该文件的编码只认识ANSI,但是文本文件本身是可以放任意编码的字节序列。

注意:中文系统下,ANSI编码即是GBK编码。

这里举个例子:

我们在eclipse新建一个项目,把它的默认编码改为utf-8

老生常谈计算机中的编码问题(必看篇)

那么对于这个项目而言,它只认识utf-8的编码文件。

接下来,我们在这个项目中新建一个文本文件utf-8.txt,并在里面输入内容如下:

老生常谈计算机中的编码问题(必看篇)

老生常谈计算机中的编码问题(必看篇)

如果直接把这个文本文件拷贝到其他项目中(默认为GBK编码),里面的内容将会变成乱码!因为编码不一样!

但是如果是将里面的内容复制粘贴过去,系统会自动转化为相应的编码,是不会出现乱码的。

老生常谈计算机中的编码问题(必看篇)

注意:如果把这个文本文件拷贝到其他地方(比如系统的桌面)上,它不会出现乱码!!因为文本文件可以是任意的编码序列,系统在读取文本文件时会自动转化为相应的编码格式。

了解文件的编码有什么用呢??在Java的IO流中,我们需要对文件进行读写,使用字节流进行读写的时候,就必须根据不同的编码方式进行读写。因为不同编码方式的各个字符所占用的字节数不同,我们要按照实际情况进行操作。

以上这篇老生常谈计算机中的编码问题(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读