程序经常出现乱码怎么办?下面仔细说一下
首先计算机存储的一切都是字节,只认识字节,也就是一串的二进制数字。
而字符的存储是需要先通过字符集编码转换成可存储的“二进制数字”。而出现乱码的原因基本上都是在这个阶段出现的。也就是通过字符集编码转换阶段。比如:‘中’字符想存储到计算机上,需要先通过XX字符编码转换然后存储到计算机上,而在其他计算机(B)上读取的时候,因为计算机内部存储的是二进制,此时B计算机从硬盘上读取到二进制数值通过YY字符编码进行转换,然后显示,此时,如果XX编码与YY编码如果不兼容的话,那么就会出现乱码;如果两套编码兼容,就不会出现乱码。
acsii编码使用7个二进制位对字符编码。因为计算机基本存储单元是字节,所以采用一个字节对字符编码。(1byte = 8bit ,一个字节由8位表示,所以在计算机内部最高位为0,其他7位是编码值)。
ansi编码:为了扩充acsii编码,以用于显示本国语言,不同的国家和地区制定了不同的标准,由此产生了GB2312,BIG5,JIS等各自的编码标准。这些使用两个字节来代表一个字符的各种汉字延伸编码方式,称为ansi编码,又称为mbcs。(Muilti-Bytes Charecter Set,多字节字符集)
unicode:如ansi编码条例中所述,世界上存在着多种编码方式。在ansi编码下,同一个编码值,在不同的编码体系里代表着不同的字。这个问题促使了unicode编码诞生:将世界上所有符号都纳入其中,无论中文、英文、日文等,每个符号都对应一个唯一的编码,大家都使用这个编码表,就不会出现乱码了,这就是unicode编码。缺点:很大的集合,虽然统一了编码,但是效率不高。(例如存储英文的话,前三个字节都是0,最后一个字节才是真正的存储值,浪费空间)
utf-8:为了提高unicode编码效率,出现了utf-8编码。utf-8可以根据不同的编码自动选择编码长短,比如英文字母使用一个字节就够了。utf-8编码是在unicode编码值上通过utf-8编码器再一次的编码得出来的。
base64:把由其他编码存储的符号转换成acsii码。
到这里,如果出现了乱码,相信也会知道怎么解决了吧。
由什么编码集存储的就由什么编码集转换显示。
最好采用utf8编码集。因为通用。
文章有不当之处,欢迎指出。
转载于:https://blog.51cto.com/jiaxiaoxu/2337360