字符编码的介绍

这篇具有很好参考价值的文章主要介绍了字符编码的介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

字符编码的介绍

  • 前提知识了解
  • 字符编辑的介绍
  • 字符编辑的发展
  • UTF-8的由来
  • 字符编码的应用
  • 编码和解码

前提知识了解

三大核心硬件

所有软件都是运行硬件之上的,与运行软件相关的三大核心硬件为cpu、内存、硬盘,我们需要明确三点

#1、软件运行前,软件的代码及其相关数据都是存放于硬盘中的

#2、任何软件的启动都是将数据从硬盘中读入内存,然后cpu从内存中取出指令并执行

#3、软件运行过程中产生的数据最先都是存放于内存中的,若想永久保存软件产生的数据,则需要将数据由内存写入硬盘

文本编辑器读取文件内容的流程

#阶段1、启动一个文件编辑器(文本编辑器如nodepad++,pycharm,word)

#阶段2、文件编辑器会将文件内容从硬盘读入内存

#阶段3、文本编辑器会将刚刚读入内存中的内容显示到屏幕上

文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不去理会python的语法,而python解释器将文件内容读入内存后,可不是为了给你瞅一眼python代码写的啥,而是为了执行python代码、会识别python语法)

字符串编码的介绍

字符编码它的前提

# 字符编码它的前提:它只跟字符类型和文本类型相关,跟视频文件、音频文件、图片文件等无关
计算机内部只能够认识二进制01,计算机之所以能够认识各种各样的字符,那是因为计算机的内部维护着一张字符编码表

字符编码

字符编码(Character Encoding):字符编码是指一种映射规则,根据这个映射规则可以将某个字符映射成其他形式的数据以便在计算机中存储和传输。例如ASCII字符编码规定使用单字节中低位的7个比特去编码所有的字符,在这个编码规则下字母A的编号是65(ASCII码),用单字节表示就是0x41,因此写入存储设备的时候就是二进制的 01000001。每种字符集都有自己的字符编码规则,常用的字符集编码规则还有 UTF-8编码、GBK编码、Big5编码等。

字符编码的发展

一家独大

上个世纪60年代,美国制定了一套字符编码规则,对英语字符与二进制位之间的关系做了统一规定,这编码规则被称为ASCII编码,一直沿用至今。

ASCII编码一共规定了128个字符的编码规则,这128个字符形成的集合就叫做ASCII字符集。在ASCII编码中,每个字符占用一个字节的后面7位,最前面的1位统一规定为0。在ASCII编码中,0~31 是控制字符如换行回车删除等,32~126 是可打印字符,可以通过键盘输入并且能够显示出来。(下图是ASCII字符集中字符和码值的对应关系)

五代十国

英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。所以当ASCII码到欧洲的时候,一些欧洲国家就决定对ASCII编码进行适当的“改造”:利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。这个编码统称为EASCII(Extended ASCII)。

但是欧洲的语言体系有个特点:小国家特别多,每个国家可能都有自己的语言体系,语言环境十分复杂。因此即使EASCII可以表示256个字符,也不能统一欧洲的语言环境。

为了解决上面这个问题,人们想出了一个折中的方案:在EASCII中表示的256个字符中,前128字符和ASCII编码表示的字符完全一样,后128个字符每个国家或地区都有自己的编码标准。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0—127表示的符号是一样的,不一样的只是128—255的这一段。

根据这个规则,就形成了很多子标准:ISO-8859-1、ISO-8859-2、ISO-8859-3、……、ISO-8859-16。这些子标准适用于欧洲不同的国家地区。

大一统

ASCII码字符集,总共才能容纳256个字符,对于全世界各国语言来说,很难全部包含在内,所有后来就出现了Unicode字符集。

Unicode字符集是一个很大的字符集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。
需要注意的是,Unicode只是一个字符集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何编码如何存储。这就造成了两个问题:

第一个问题是,如何才能区别Unicode和ASCII?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?
第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。
为了解决Unicode字符集存在的问题,就出现了UTF(Unicode Transformation Formats)系列的编码规则。UTF编码规则具体规定了Unicode字符集中的字符是如何编码的。

总结:Unicode是一个很大的字符集,这个字符集只规定了这个字符集中每个字符对应的码值是多少,但是这个字符集并没有规定具体的编码规则,具体的编码规则有UTF系列的编码规则实现。
文本编辑器输入任何字符都是最新存在于内存中,是unicode编码的,存放于硬盘中,则可以转换成任意其他编码,只要该编码可以支持相应的字符

# 英文字符可以被ASCII识别
英文字符--->unciode格式的数字--->ASCII格式的数字

# 中文字符、英文字符可以被GBK识别
中文字符、英文字符--->unicode格式的数字--->gbk格式的数字

# 日文字符、英文字符可以被shift-JIS识别
日文字符、英文字符--->unicode格式的数字--->shift-JIS格式的数字

UTF-8的由来

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码规则,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到4个字节编码Unicode字符。用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)
UTF-8就是在互联网上使用最广的一种Unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是:UTF-8编码是Unicode的实现方式之一。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度(UTF-8编码可以容纳2^21个字符,总共200多万个字符)。
再次强调一个概念:就是Unicode是一个字符集,这个字符集世界上所有的字符定义了一个唯一编码。其仅仅规定了每个符号的二进制代码,没有制定细化的存储规则。UTF-8、UTF-16、UTF-32才是Unicode的存储格式定义。

字符编码的应用

1. 如何解决乱码问题?
	你在写文件的时候使用的是什么编码,那么你打开的时候就使用对应编码解码就行

2. Python解释器版本不同代码的编码问题
	"""
		在python2中使用的编码表不是utf-8,而是ASCII码表
            # coding:utf-8
        
        """它使用的是ASCII码表"""
            # 在Python2 中如何定义中文字符
            s = u'你好'
            print s
	"""

编码和解码

由字符转换成内存中的unicode,以及由unicode转换成其他编码的过程,都称为编码encode文章来源地址https://www.toymoban.com/news/detail-687972.html

编码

由内存中的unicode转换成字符,以及由其他编码转换成unicode的过程,都称为解码decode

解码

把计算机能够读懂的数字转化为人类能够读懂的字符
 # 编码
    # res = '趁年轻,学技能,养活自己'
    res = '趁年轻'
    # print(res.encode('utf-8')) # b'\xe8\xb6\x81\xe5\xb9\xb4\xe8\xbd\xbb' bytes


                                         # b'\xe8\xb6\x81\xe5\xb9\xb4\xe8\xbd\xbb'
    # 解码
    res1 = res.encode('utf-8')
    print(res1.decode('utf-8'))  # 趁年轻

    """如果遇到解码的时候,你不指定使用什么编码进行解码,你就试:utf-8 gbk"""

    # 扩展
    res2 = 'hello world'
    print(res2.encode('utf-8'))
    # print(b'hello world')

到了这里,关于字符编码的介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • openStack:学习openStack的前提知识(1)虚拟化以及KVM简介

    KVM----目前X86平台上最热门,运用最多的虚拟化解决方案,openStack对KVM支持也是最好的。 所以后续使用KVM作为Hypervisor,进行openStack相关实验。 KVM:Kernel-Based Virtual Machine,基于Linux内核的虚拟化技术 详细的虚拟化知识请参考:计算虚拟化简介 组件 作用 kvm.ko 只用于管理虚拟

    2024年01月19日
    浏览(38)
  • 不讨论颜色的前提下,如何证明自己不是色盲?神奇的零知识证明

    《阿里巴巴与四十大盗》中有这样一段小故事: 阿里巴巴会芝麻开门的咒语,强盗向他拷问打开山洞石门的咒语,他不想让人听到咒语,又要向强盗证明他知道这个咒语。 那应该怎么办呢? 便对强盗说:「你们离我一箭之地,用弓箭指着我,你们举起右手,我念咒语打开石

    2024年02月02日
    浏览(25)
  • Python中的字符串与字符编码

    Hello,这里是Token_w的博客,欢迎您的到来 今天文章讲解的是Python中的字符串与字符编码,其中有基础的理论知识讲解,也有实战中的应用讲解,希望对你有所帮助 整理不易,如对你有所帮助,希望能得到你的点赞、收藏支持。感谢 Python中的字符编码是个老生常谈的话题,同

    2024年02月12日
    浏览(44)
  • 算法加密与解密、字符编码与字符集

    加密保证数据不会被窃取或者修改 哈希算法 压缩映射 :散列又称为哈希,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。 哈希算法(Hash)又称摘要算法(Digest),哈希算法的目的就是为了验证原始数据是否被篡改。 主流的散列算法有MD5和

    2024年02月03日
    浏览(39)
  • java 字符编码转换

    字符编码是将字符转换为二进制数字的过程,用于计算机的输入、输出和存储。在Java中,字符编码是使用Java编程语言中的Unicode字符集进行处理的。Unicode字符集是一个标准的字符集,它为世界上的每个字符分配了一个唯一的编号,包括拉丁字母、汉字、日语假名等等。 Java的

    2024年02月16日
    浏览(28)
  • 字符编码(idea)

    File----------settings-------------Editor------------File Encodings

    2024年02月09日
    浏览(26)
  • 指定IDEA的字符编码

    1.Ctrl+Alt+S打开Settings设置, 2.找到Editor---File Encodings 3.在该页面设置: Global Encoding: UTF-8         设置全局编码为UTF-8 Project Encoding: UTF-8        设置项目编码为UTF-8,在下面把要项目添加进来. Default encoding for properties files: UTF-8        设计属性文件的默认编码为UTF-8, 4.如果ide

    2024年02月14日
    浏览(28)
  • 前端常见的字符编码方案

    在前端开发中,最常见的字符编码方案是 UTF-8 。 UTF-8 是一种可变长度的 Unicode 编码方案,可以表示几乎所有的字符,并且与 ASCII 兼容。由于互联网的广泛应用和多语言的支持, UTF-8 成为了前端开发中的首选字符编码方案。 使用UTF-8编码的好处: 1. 多语言支持 :UTF-8可以表

    2024年02月08日
    浏览(73)
  • 编码揭秘:解构字符%20背后的秘密与百分号编码艺术

    提到这个 %20 ,想必大家都见过,熟悉一点编码的人,还会知道这玩意就是空格转换而来! 那么我们一起破解, 如何编码而来? 我们今天继续学习前端编码知识, 其他编码文章: 前端Base64编码知识,一文打尽,探索起源,追求真相。 localStorage灵魂五问。 5M?? 10M !!! 字母

    2024年03月26日
    浏览(35)
  • 设置Tomcat字符编码UTF-8

    我这里是Tomcat7,标签大概在70行左右

    2024年02月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包