新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
ASCII(国外),GBK(国内)是一种字符集;
GBK中.一个英文字母一个字节,二进制第一位是0;
GBK中,一个中文汉字两个字节,二进制的第一位是1
Unicode(万国码)也是一种字符集,而CTF-8则是一种编码规范;
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
idea中用的是CTF-8编码规范,汉字为三个字节;
public class Main {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream=new FileInputStream("aaa.txt");
int len=0;
byte[]array=new byte[12];
while((len=fileInputStream.read(array))!=-1){
String a=new String(array,0,len);
System.out.println(a);
}
输出的结果为:
我是大帅
哥
比如这样 此时aaa.txt中的文本内容为"我是大帅哥";
1.经过分析,我是大帅哥一共占15个字节;
2当我创建一个长度为12的byte数组时,字节流他会一次性读取aaa.txt中"我是大帅哥"所对应的的二进制编码,如果我此时byte数组长度是12,一次性读取12个字节;
3.第一次读取12个字节所对应的刚好就是"我是大帅"这四个字所对应的12个字节;下一次将继续重复操作;
public class Main {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream=new FileInputStream("aaa.txt");
int len=0;
byte[]array=new byte[15];
while((len=fileInputStream.read(array))!=-1){
String a=new String(array,0,len);
System.out.println(a);
}
输出的结果为:
我是大帅哥
这里能够输出出来,是因为一次性都读上了;
但是!!!!!!!!!!!!!!!!!!
public class Main {
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream=new FileInputStream("aaa.txt");
int len=0;
byte[]array=new byte[11];
while((len=fileInputStream.read(array))!=-1){
String a=new String(array,0,len);
System.out.println(a);
}
输出的结果为:
我是大�
�哥
1.那为什么这种会出现乱码?
因为在这字节流读取过程中他会读取11个字节,并且放到数组中,但是当读取到"帅"这个词中,将其一分为二,不能完整的读取.所以会出现乱码;
那么如何避免这种错误的出现;
当要用输入流读取文件中的数据时,尽量用字符输入流,避免用字节输入流(除非byte数组长度大于等于自身文件字节长度)
编码和解码使用同一个码表,同一个解码方式;(Windows一般默认字符集都是GBK);
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧