zoukankan      html  css  js  c++  java
  • 字符编码

    ---恢复内容开始---

    字符串比较特殊的还有一个编码问题。

    因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大整数就是255(二进制11111111),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295。

    由于计算机是美国人发明的,因此,最早的只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。

    但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。

    你可以想到的是,全世界有上百种语言,日本把日文编到shift_JIS里,韩国把韩文编到Euc_kr里,各国有各国的标准,就会不可避免的出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

    因此,Unicode应运而生。Unicode把所有的语言都统一到一套编码里,这样就不再有乱码问题了。

    Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要四个字节)。现在操作系统和大多数编程语言都直接支持Unicode。

    ASCII编码和Unicode编码的区别:ASCII编码是一个字节,而Unicode编码通常是两个字节。

    新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

    所以,本着节约的精神,又出现了把Unicode编码转化成“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码城1-6个字节,常用的英文字母被编码成一个字节,汉字通常是三个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8就能节省空间。

    总结一下现在计算机系统通用的字符编码工作方式:

    在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

    例如:

      用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为utf-8保存到文件。

      浏览网页的时候,服务器会把动态生成的Unicode内容转换为utf-8再传输到浏览器。

    ---恢复内容结束---

    字符串比较特殊的还有一个编码问题。

    因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大整数就是255(二进制11111111),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295。

    由于计算机是美国人发明的,因此,最早的只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。

    但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。

    你可以想到的是,全世界有上百种语言,日本把日文编到shift_JIS里,韩国把韩文编到Euc_kr里,各国有各国的标准,就会不可避免的出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

    因此,Unicode应运而生。Unicode把所有的语言都统一到一套编码里,这样就不再有乱码问题了。

    Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要四个字节)。现在操作系统和大多数编程语言都直接支持Unicode。

    ASCII编码和Unicode编码的区别:ASCII编码是一个字节,而Unicode编码通常是两个字节。

    新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

    所以,本着节约的精神,又出现了把Unicode编码转化成“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码城1-6个字节,常用的英文字母被编码成一个字节,汉字通常是三个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8就能节省空间。

    总结一下现在计算机系统通用的字符编码工作方式:

    在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

    例如:

      用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为utf-8保存到文件。

      浏览网页的时候,服务器会把动态生成的Unicode内容转换为utf-8再传输到浏览器。

  • 相关阅读:
    进度条
    html5 表单新增事件
    html5 表单的新增type属性
    html5 表单的新增元素
    html5 语义化标签
    jq 手风琴案例
    codeforces 702D D. Road to Post Office(数学)
    codeforces 702C C. Cellular Network(水题)
    codeforces 702B B. Powers of Two(水题)
    codeforces 702A A. Maximum Increase(水题)
  • 原文地址:https://www.cnblogs.com/LYliangying/p/7596681.html
Copyright © 2011-2022 走看看