各字符集精简总结(ASCII、ISO8859-1(Latin1)、GB2312、GBK、UNICIDE、UTF8)及乱码处理

一、字符编码

从左向右,字符集,更新,可表示的字符更多,通用性更高,一个字符所占字节数更多(大体如此)
ASCII<ISO8859-1(Latin1)<GB2312<GBK<UNICIDE<UTF8

ASCII:单字节,最高位(第8位)为0,不参与表示,后7位表示128个字符。内定义半角标点符号。仅够英美用
ISO8859-1(Latin1):单字节,8位都参与表示字符,256个字符。仅够欧美用。
GB2312:双字节(每个字节大于127),内定义全角标点符号。ASCII中文扩展。基本够中国使用
GBK:双字节(无需每个字节大于127),增少数名族文字和繁体汉字。够中国用
UNICODE:UCS-2,双字节,最多组合表示65535个字符。够全世界用
UTF-8:可变字节表示字符,字节范围为1~4。互联网用

Unicode和Unicode(big endian)两种:Unicode为低位字节在后,高位字节在前。而Unicode(big endian)为低位字节在
前,高位字节在后。

总结,使用unicode和utf-8可以表示世界范围内所有字符。无需字符集转换。

各操作系统 默认字符集合不统一,例如:windows简体中文版 默认字符集合是ASCII和GB2312。
用字节相关变量保存汉字时,需要统一读、写双方的汉字集合,否则就会出现乱码!

读写数据库时,也会经常出现乱码问题,将读出的数据转换为应用所用编码,将写入的数据转换为数据库所用编码即可。

数据库中类型前有n的是Unicode。

二、乱码问题

乱码的本质是,写字符的编码与读字符的编码不一致导致的。

例如:windows默认下,编码是ASCII和GB2312。读取时,用UTF8,当然是乱码。
html默认用utf-8写,用Latin1读取,也是乱码

避免乱码的处理建议:

1、统一写字符的编码和读字符的编码

2、若写字符编码与读字符编码无法一致,则读取时,先将字符以写字符编码格式读出来,然后进行编码转换,将转换结果转给需要读取字符的接口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章