字符集编码

一:字符集

字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,就需要进行字符编码,以便计算机能够识别和存储各种文字。中文文字数目大,而且还分为简体中文和繁体中文两种不同书写规则的文字,而计算机最初是按英语单字节字符设计的,因此,对中文字符进行编码,是中文信息交流的技术基础。
1:还是看不不懂
比如:为什么会出现乱码?
哪个地方用哪个编码?
文本用什么编码?用哪个?到底怎么用?各种编码的区别是什么?能不能互相转化?转化会不会乱码?
2:Sting基础
长度,字符个数:str.length()
提取指定位置上的字符:str.charAt()
复制String中的[],产生引得数组,不会影响原来的数组:char [] arr=str.toCharArray();
返回字串在母串中的位置,1指定开始搜索的位置

int pos=str.indexOf("world",1);
System.out.println(pos);

String s1="3month";
String s2="3Year";
String s3="3Day";
System.out.println(s1.endsWith("Year"));

切割字符串,形成String数组

str="hello world";
String [] Ar=str.split("");
System.out.println(Ar.length);

substring:substring(beginIndex,endIndex);
str=“hello world”;
String[]strArr=str.split(",");
System.out.println(strArr.length);
子串是前包后不包的System.out.println(str.substring(0,str.length()));
System.out.println(str.substring(6,10));
3:编码表
ASCII:7位表示
ASCII码,是最早产生的编码规范,一共包含00000000~01111111共128个字符,可以表示阿拉伯数字和大小写英文字母,以及一些简单的符号。可以看出ASCII码只需要1个字节的存储空间,最高位为0。后被称为(American Standard Code for Information Interchange,美国信息交换标准代码)。
ios-8859-1
欧洲码表,ISO-8859-1是不支持中文的,有时这就是在浏览器上显示乱码的原因。
GBK
GBK字符集中所有字符占2个字节,不论中文英文都是2个字节。
unicode
全世界通用的编码规范
UTF-8,UTF-8是一种变长字符编码,注意:UTF-8不是编码规范,而是编码方式
解码:
使用错误的编码方式,产生其他不合理的字符,这就是我们通常说的————乱码!
解码:
但如果编码规范的字库表不包含目标字符,则无法在字符集中找到对应的二进制数。这将导致不可逆的乱码!例如:像ISO-8859-1的字库表中不包含中文,因此哪怕将中文字符使用ISO-8859-1进行编码,再使用ISO-8859-1进行解码,也无法显示出正确的中文字符。

String str="a中国人b";
  //编码
  byte[] bytes=str.getBytes("GBK");
  System.out.println(str.length());
  //解码
  String newStr =new String(bytes,"GBK");//IOs=8859-1  欧洲码表不行
  System.out.println(newStr);

4:演示

String chinese="汉";
//使用UTF-8编码方式进行编码。
byte[] bs = chinese.getBytes("UTF-8");
for (byte b : bs) {
 System.out.print(b+" ");
}

结果:-26 -79 -119
可以看出,1个汉字变成了3个字节,证明了1个汉字在UTF-8 编码方式下占3个字节。
我们继续,将字节数组,使用UTF-8 编码方式进行解码。

//使用UTF-8编码方式进行解码。
String utf8 = new String(bs,"UTF-8");
System.out.println(utf8);

结果:
解码后正确的显示了中文字符汉字。

但如果我们使用GBK进行解码。

//使用GBK编码方式进行解码。
String gbk = new String(bs, "GBK");
System.out.println(gbk);

结果:

姹?


说明使用错误的解码方式就会乱码。
但如果将汉字使用ISO-8859-1进行编码 ,然后解码

String chinese = "我是帅哥";
//使用ISO-8859-1编码方式进行编码。
byte[] bs = chinese.getBytes("ISO-8859-1");
for (byte b : bs) {
 System.out.println(b + " ");
}
//使用ISO-8859-1编码方式进行解码。
String iso = new String(bs, "ISO-8859-1");
System.out.println("\n"+iso);

结果:

63 63 63 63 
????


可以看出,无论是哪个汉字,使用ISO-8859-1编码后,都变成了63
部分内容出自:https://blog.csdn.net/qq_42068856/article/details/83792174

发布了50 篇原创文章 · 获赞 75 · 访问量 6690

猜你喜欢

转载自blog.csdn.net/weixin_45822638/article/details/103829875
今日推荐