基础知识Notes: 字符串编码(ASCII, Unicode and UTF8)

本文详细介绍了ASCII编码的基本概念及其局限性,并深入探讨了Unicode编码的设计动机及其实现方式——UTF-8编码的特点与规则。通过本文,读者能够理解不同编码方式之间的区别与联系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结陈述:ASCII码是用来表示英语字符的编码。只用1个字节(8位)。所以总共有256种可能。虽然实际而言只规定了128种,但是其每个字符的表示依然需要1个字节。而且,最高位永远为0.


UTF-8是Unicode码的优化方案中采用得较为广泛的方案。Unicode设计的动机:世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。


Unicode的好处是显而易见的,但是坏处便是需要很多位去表示一个字符(总共有million级别的可能),然而很多时候,是不需要那么多位的。它的提出代表一种方案,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。UTF-8就是在互联网上使用最广的一种Unicode的实现方式。其他实现方式还包括UTF-16(字符用两个字节或四个字节表示)和UTF-32(字符用四个字节表示),不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。


UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。


参考链接:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html



V27960021@dg03podv27960021kj4p:~/存储/test$ python storage2.0.py --test_dir 测试机 --ref_dir 对比机 --output moscow.xlsx ============================================================ 开始对比: 测试机(测试机) vs 对比机(对比机) ============================================================ 处理目录: 测试机 解析主分区文件: 测试机/product.txt 解析主分区文件: 测试机/vendor_dlkm.txt 解析主分区文件: 测试机/vendor.txt 解析主分区文件: 测试机/my_stock.txt 解析主分区文件: 测试机/my_engineering.txt 解析主分区文件: 测试机/my_manifest.txt 解析主分区文件: 测试机/my_preload.txt 解析主分区文件: 测试机/system_dlkm.txt 解析主分区文件: 测试机/my_bigball.txt 解析主分区文件: 测试机/my_heytap.txt 解析主分区文件: 测试机/odm.txt 解析主分区文件: 测试机/system_ext.txt 解析主分区文件: 测试机/my_company.txt 解析主分区文件: 测试机/data.txt 解析主分区文件: 测试机/my_product.txt 解析主分区文件: 测试机/system.txt 解析主分区文件: 测试机/my_carrier.txt 解析主分区文件: 测试机/my_region.txt 处理目录: 对比机 解析主分区文件: 对比机/product.txt 解析主分区文件: 对比机/vendor_dlkm.txt 解析主分区文件: 对比机/vendor.txt 解析主分区文件: 对比机/my_stock.txt 解析主分区文件: 对比机/my_engineering.txt 解析主分区文件: 对比机/my_manifest.txt 解析主分区文件: 对比机/my_preload.txt 解析主分区文件: 对比机/system_dlkm.txt 解析主分区文件: 对比机/my_bigball.txt 解析主分区文件: 对比机/my_heytap.txt 解析主分区文件: 对比机/odm.txt 解析主分区文件: 对比机/system_ext.txt 解析主分区文件: 对比机/my_company.txt 解析主分区文件: 对比机/data.txt 解析主分区文件: 对比机/my_product.txt 解析主分区文件: 对比机/system.txt 解析主分区文件: 对比机/my_carrier.txt 解析主分区文件: 对比机/my_region.txt 创建总览Sheet页(仅主文件数据) 创建文件Sheet页: data Traceback (most recent call last): File "storage2.0.py", line 284, in generate_dual_report title.decode('utf-8'), File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) 生成Excel文件时出错: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
最新发布
08-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值