ecllipse中 粘贴"内容"这种 即使文件的编码不同 程序本身可以做转换(其实不是转换 而是"看到的"是字符 而底层是"字节" 所以粘贴的是"字符" 并没有影响到"字节"的 写入 )
复制粘贴的 系统可以正常读取文本文件
直接创建的 如果不是默认编码 再次读取会乱码 (这里不太懂)
gbk编码中文占用两个字节,英文占用一个字节;
utf-8里中文占用三个字节,英文占用两个字节;
中文机器默认ansi编码;
文本文件,就是字节序列
可以使任意编码的字节序列
如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ansi编码
文件的编码
GBK:中文占2个字节,英文占1个字节
UTF-8:中文占3个字节,英文占1个字节
//将一个字符串转换成指定编码的字节序列 byte[] bytes = str.getBytes("编码格式"); //将一个字符串转换成字节序列时没有指定编码格式则默认是当前项目的默认编码格式 byte[] bytes = str.getBytes();
java是双字节编码,其编码格式是utf-16be
byte[] bytes = str.getBytes("utf-16be");
当字节序列是某种编码时,如果要把字节序列转化成字符串,也需要通过指定编码的方式转化,否则会乱码
String str = new String(bytes,"utf-16be");
文本文件就是字节序列,可以是任意编码的字节序列,如歌在中文系统上直接创建文本文件,那么该文本文件只认识ansi编码
UTF-16BE 编码 的字节表示
UTF-8 编码表示是一个中文三个字节 一个英文一个字节
GBK 编码表示是一个中文两个字节 一个英文一个字节
!!!!!!!!!!!!!1
!!!!!!!!!
!!!!!!!!!!!!!!!!1
java是双字节编码
444444444444444
utf-8
4444444444444
显 式
33333333333333333
3333333333333
3333333
把前面24个0去掉,只留下后8位
22222222222222
11111111111
JAVA中的编码
在Java中gbk编码中文占用2个字节,英文占用1个字节。
在Java中utf-8编码中文占用3个字节,英文占用1个字节。
在Java中utf-16be编码中文占用2个字节,英文占用2个字节。
当你的字节序列是某种编码时,想要把字节序列变成字符串,你也需要这种编码,否则会出现乱码。
文本文件就是字节序列,可以是任意编码的字节序列。
https://blog.csdn.net/wangailin666/article/details/105009733
.toHexString(名称 & 0xff)把字节以16进制的方式显示。
gbk编码中文占用2个字节,英文占用1个字节
utf-8编码中文占用3个字节,英文占用1个字节
utf-16be 中文占用2个字节,英文占用2个字节
如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ansi编码
中文系统下,ANSI编码代表GBK编码
当你用字节序列标识某种编码时,这个字节序列变成字符串,也需要这种编码方式,否则出现乱码
1.Integer.toHexString(byte)把字节(转换成了int)以16进制的方式显示 ,byte转换成int相当于int后八位为byte原来的,后八位前24位加上24个0,
2.Integer.toHexString(byte%0xff) 把前头的0取掉,只留下后八位
3.转换成字节序列用的是项目默认的编码gbk,中文占用2个字节,英文占用1个字节
4.byte[] byte=s.getBytes()是用默认编码,byte[] byte=s.getBytes(参数)是用参数指定的编码(参数为:“某种编码”)
5.utf-8编码中文占用3个字节,英文占用1个字节
6.java是双字节编码,utf-16be编码,字符串一个字符占两个字节, 中文占用2个字节,英文占用2个字节。
7.当你的字节序列式某种编码时,这个时候想把字节序列变成字符串,也需要用这种编码方式,否则会出现乱码。String str1=new String(byte):用项目默认的编码,String str2=new String(byte,参数):用参数指定的编码。比如byte[] byte=String.getBytes("utf-8"),那么将此字节序列变成字符串就要用String str=new Stirng(byte,"utf-8")。用gbk编码的字节序列直接用第一种不指定编码参数的方法即可,因为默认的就是用gbk编码所以不用gbk编码
8.文本文件就是字节序列,可以是任意编码的字节序列。如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ansi编码,中文系统下,ansi编码代表gbk编码
9.中文机器上你直接创建一个文本文件,那么它只能认识ansi编码(gbk),但是文本文件本身可以放各种编码,直接粘贴到中文机器上的无论编码是哪种它都认识,只不过在中文机器上直接创建时会有这个特殊性。
10.某个项目的文本文件只认识项目指定的编码,换一种别的编码他就不认识了。比如你把用utf-8编码的A项目下的文本文件直接拷贝到使用默认编码gbk的B项目下,拷贝的文件里就会出现乱码,但如果只是把A项目文本文件中的内容拷贝到B项目下的文本文件中,他会自动进行转换
本教程几点要点:
RandomAccessFile类的使用,可以使用其中的指针自定义读取文件中的指定位置,实现分段读取,分段存储;
java文件的保存方式是字节的形式保存的,byte,因此保存的文件有编码的问题;
工程中读取或者保存在电脑中的文件会不会有乱码,与文件保存时的编码,以及工程编码属性这两个因素有关,需要注意这点;
类的序列化:可重写writeObject、readObject两个方法来自定义类的序列化方法,将某些trasient的属性自定自定序列化。
.toHexString(名称 & 0xff)把字节以16进制的方式显示。
gbk编码中文占用2个字节,英文占用1个字节
utf-8编码中文占用3个字节,英文占用1个字节
utf-16be 中文占用2个字节,英文占用2个字节
如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ansi编码
中文系统下,ANSI编码代表GBK编码
.toHexString(名称 & 0xff)把字节以16进制的方式显示。
gbk编码中文占用2个字节,英文占用1个字节
utf-8编码中文占用3个字节,英文占用1个字节
utf-16be 中文占用2个字节,英文占用2个字节
如果我们在中文机器上直接创建文本文件,那么该文本文件只认识ansi编码
中文系统下,ANSI编码代表GBK编码
当你用字节序列标识某种编码时,这个字节序列变成字符串,也需要这种编码方式,否则出现乱码
文件的编码
.getBytes()转换字节序列是项目默认的。
项目默认编码是gbk,中文占2个字节,英文占1个字节。
还有utf-8编码中文3个字节,英文1个字节。
utf-16be编码中英各占2个字节
.toHexString(名称 & 0xff)把字节以16进制的方式显示。
如果在中文机器上直接创建文本文件,那么该文件只认识ANSI编码。