zoukankan      html  css  js  c++  java
  • Unicode 和 UTF-8 的关系和区别

      说到编码,得先从ASCII编码讲起。ASCII编码是由美国人发明,美国的字符不超过255个,所以ASCII编码使用了8bit 即一个字节来存储字符。由于汉字的数量远超255个,所以中国自己发明了一个GB2312编码来表示汉字,一般的汉字使用2个字节,对于一些生僻的汉字则使用更多的字节来表示,当然,GB2313编码是可以兼容ASCII码的。

            然后,日本,韩国等等国家也自己发明了一套编码方法,这时候又出现了一个新的问题。如果一篇文章里面,即有中文,又有日文的话,无论使用中文的编码方法还是使用日文的编码方法都会出现乱码。随后,unicode编码便应运而生。unicode编码对文字的编码进行了统一,当然,unicode只是一种编码规范,它有多个版本,常用的unicode编码使用了16位来存储字符,16位的存储空间足以容纳世界上所有书面字符(对于汉字来说,一共有6万多个,只能包含其中的一些常用汉字,所以unicode编码对于汉字的兼容性并不是特别好)。unicode编码兼容了ASCII码,ASCII码转unicode编码时,保持后8位不变,前8位只需要用0去补全即可。

            使用了unicode编码后,又有新的问题出现。因为unicode编码是用两个字节来存储字符,如果一篇文章中,大部分都是英文,使用unicode编码就会造成空间的浪费,对英文部分使用ASCII码只需要一个字节就可以了。这时候,utf-8解决了这个问题。utf-8是一种可变长的字符编码,当存储英文时只使用一个字节,节省了一半的空间,而存储中文字符时,长度还是不变。utf-8虽然压缩了存储空间,但是如果在内存中存储,使用utf-8却由于它的长度不固定,带来了很大的不便,使得在内存处理字符变得复杂。应对这个问题的解决策略是:在内存中存储字符时还是使用unicode编码,因为unicode编码的长度固定,处理起来很方便。而在文件的存储中,则使用utf-8编码,可以压缩内存,节省空间。这里一般有个自动转换的机制,即从文件中读取utf-8编码到内存时,会自动转换为unicode编码,而从内存中将字符保存到文件时,则自动转换为utf-8编码。


    ---------------------
    作者:lvzhanbin
    来源:CSDN
    原文:https://blog.csdn.net/lvzhanbin/article/details/78151633
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    168. Excel Sheet Column Title
    171. Excel Sheet Column Number
    264. Ugly Number II java solutions
    152. Maximum Product Subarray java solutions
    309. Best Time to Buy and Sell Stock with Cooldown java solutions
    120. Triangle java solutions
    300. Longest Increasing Subsequence java solutions
    63. Unique Paths II java solutions
    221. Maximal Square java solutions
    279. Perfect Squares java solutions
  • 原文地址:https://www.cnblogs.com/kacy/p/10373271.html
Copyright © 2011-2022 走看看