常用字符集编码详解(ASCII GB2312 GBK GB18030 unicode UTF-8)

常用字符集编码详解

在计算机中,各种语言的字符需要通过字符编码来表示,常见的字符集编码包括ASCII、GB2312、GBK、GB18030、unicode、UTF-8。下面逐一介绍。

ASCII

ASCII(American Standard Code for Information Interchange)是最早的字符编码,将每个字符用7位十进制数表示。编码范围是0-127,其中控制字符(如换行、回车等)占用了前32个。例如,字符'A'的ASCII码是65。

GB2312

GB2312 是中国官方使用的汉字编码方式,采用2个字节(16位)表示每个汉字,编码范围是0xA1A1-0xFEFE,其中前一个字节位于0xA1-0xF7,后一个字节位于0xA1-0xFE。例如,“中文”两个字的GB2312码是0xD6D0B9FAC3C5。

GBK

GBK是GB2312的扩展版本,在不改变GB2312的基础上,重新定义了一些未使用的区域,并将汉字编码范围扩展至0x8140-0xFEFE,同时保持了与GB2312编码范围内字符的兼容性。例如,“中文”两个字的GBK码是0xB1A8D7D6。

GB18030

GB18030是中国发布的最新的汉字编码标准,兼容GB2312和GBK,但编码范围更广。其中汉字的编码使用1至4个字节表示,最大编码范围是0x01-0x10FFFF,包含了Unicode的全部字符。例如,“中文”两个字的GB18030码是0xCAC7D7D6。

Unicode

Unicode 是国际组织制定的字符编码标准,将每个字符用一个唯一的码位表示,编码范围是0-0x10FFFF,其中前128个码位与ASCII编码一致,后面的码位包含了各种语言的字符,包括汉字、拉丁字母、希腊字母、数学符号等。例如,“中文”两个字的Unicode码是0x4E2D4E00。

UTF-8

UTF-8是一种基于Unicode标准的变长字符编码方式,可以表示Unicode编码范围内的所有字符,具有很好的兼容性和可扩展性。UTF-8编码规则如下:

  • 如果字符的码位在0-127之间,用一个字节表示,最高位为0;
  • 如果字符的码位超过127,用多个字节表示,每个字节的最高位均为1,其余位用该字符码的二进制表示,除第一个字节外,其余字节最高位为0。

例如,“中文”两个字的UTF-8编码为0xE4B8ADE69687。

示例1

下面给出将字符串"hello"分别用ASCII和UTF-8编码的代码示例:

# ASCII编码
s = "hello"
res = []
for c in s:
    res.append(str(ord(c)))
print(",".join(res))
# 输出结果:104,101,108,108,111

# UTF-8编码
s = "hello"
res = []
for c in s:
    b = c.encode('utf-8')
    res.append(' '.join([str(b[i]) for i in range(len(b))]))
print(",".join(res))
# 输出结果:104 101 108 108 111

示例2

下面给出将汉字"中文"分别用GBK和UTF-8编码的代码示例:

# GBK编码
s = "中文"
b = s.encode('gbk')
res = []
for i in range(len(b)):
    if i%2 == 0:
        res.append(str(b[i])+","+str(b[i+1]))
print(",".join(res))
# 输出结果:176,161,200,165

# UTF-8编码
s = "中文"
b = s.encode('utf-8')
res = []
for i in range(len(b)):
    res.append(str(b[i]))
print(",".join(res))
# 输出结果:228,184,173,230,150,135

以上就是常用字符集编码的详细攻略,如有有疑问,欢迎留言讨论!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:常用字符集编码详解(ASCII GB2312 GBK GB18030 unicode UTF-8) - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 关于Spring中声明式事务的使用详解

    关于Spring中声明式事务的使用详解 什么是声明式事务? 在Spring中,事务是指一组需要保证数据完整性和一致性的数据库操作。 在进行事务处理时,必须保证多个操作的原子性,即所有操作都能够全部成功或全部失败。 Spring中的声明式事务是基于AOP实现的,通过对方法进行拦截,在方法执行前后加上事务的开始和结束语句,来实现事务的管理。这样即使开发人员忘记在…

    Java 2023年5月19日
    00
  • java实现多线程卖票功能

    下面是Java实现多线程卖票功能的完整攻略。 1. 线程安全性 在多线程环境中,相同的资源可能被多个线程同时访问,因此必须保证线程安全性。Java提供了多种方式来实现线程安全性,包括使用synchronized关键字、使用Lock接口、使用Atomic类等。 2. 实现多线程卖票 为了实现多线程卖票功能,我们可以创建多个线程来模拟多个售票窗口,并且使用同一组…

    Java 2023年5月18日
    00
  • jsp+ajax实现的局部刷新较验验证码(onblur事件触发较验)

    当用户在web应用程序中填写表单并提交时,验证码是必不可少的一部分,以防止自动化攻击或恶意行为。在这种情况下,我们可以使用JSP和AJAX来实现验证码的部分刷新。 实现验证码的部分刷新的关键是使用AJAX发送HTTP请求并触发JSP页面的代码块。该代码块将生成验证码并返回到AJAX调用。验证码可以用图像格式显示在JSP页面上或使用JavaScript或CSS…

    Java 2023年6月15日
    00
  • 详解Java的编译执行与解释执行

    Java是一种编译型语言,Java源文件在编译时会被编译成Java字节码文件,在Java虚拟机上执行。此时,Java bytecode是被解释执行的。Java程序的执行过程可以被分为两个阶段:编译阶段和运行阶段。 编译阶段 Java源文件在编译时会被编译器编译成特定的字节码文件(.class文件),字节码文件包含了代码经过编译器编译后的中间表达形式。以下是使…

    Java 2023年5月20日
    00
  • Java进阶之Object类及常用方法详解

    Java进阶之Object类及常用方法详解 什么是Object类? Object是Java中所有类的超类(superclass),也就是说,所有的Java类都继承自Object类。所以,每个Java类都具有Object类的所有特性和方法。 常用方法 Object类有许多方法,其中一些是在实际开发中非常有用的。下面我们来详解一下常用的方法。 toString(…

    Java 2023年5月26日
    00
  • Java 文件上传的实例详解

    下面就详细讲解一下“Java 文件上传的实例详解”的完整攻略。 简介 Java 文件上传是一项常见的网络应用需求,例如图片上传、文件上传等场景。通过使用 Java 语言和相关的框架,我们可以轻松实现一个强大、安全和高效的文件上传应用。 通用的文件上传实现步骤 对于大部分文件上传场景,我们可以采取以下步骤来实现: 在客户端,通过 HTML 表单或 JavaSc…

    Java 2023年5月20日
    00
  • Java自定义标签用法实例分析

    Java自定义标签用法实例分析 Java中提供了很多内置标签(如、 等),同时也支持自定义标签,通过自定义标签可以方便地实现更加复杂的功能和效果。 一、自定义标签的基本步骤 定义标签的实现类和标签处理器类(TagSupport的子类); 在web.xml中配置标签库; 在JSP页面中引入标签库,即使用<%@ taglib %>指令; 在JSP页面…

    Java 2023年6月15日
    00
  • 关于spring boot整合kafka+注解方式

    下面是关于Spring Boot整合Kafka+注解方式的完整攻略。 1. 引入依赖 首先,我们需要在Maven或Gradle中引入Spring Boot和Kafka的依赖。在Maven中,需要在pom.xml中引入以下依赖: <!– Spring Boot –> <dependency> <groupId>org.s…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部