utf-8@Python
with open('1.txt',"w") as fff: print(fff)
测试print()函数的file参数时,不小心弄出来一个<_io.TextIOWrapper name='1.txt' mode='w' encoding='cp936'>
才知道原来‘GB2312’原来是系统中第936号编码格式。
windows的PS默认codepage是CP936,除此之外还有cp950 繁体中文、cp932 日语、cp1250 中欧语言,通过命令chcp 65001
可以修改默认编码为utf-8,即65001号活动代码页,但是再次运行那段代码,仍然显示encoding='cp936'
,怎么弄才能默认国际化呢……(不知道,后文也与此问题无关)
参考:https://www.cnblogs.com/fnlingnzb-learner/p/6163205.html
第一个步骤:char(int)
, ord(char)
第二个步骤:str.encode(encoding='UTF-8',errors='strict')
, bytes.decode(encoding='UTF-8',errors='strict')
历史
ASCII
American Standard Code for Information Interchange,美国信息交换标准码。
7 bits(字符,8bits是一个字节byte) 表示128个文字符号(为了与bit相区别,后文简称问文符)。
被IBM公司扩展后,用8bit来表示每一个文符,总共可以表示256个文符。也就是当第一个bit是0时仍表示之前那些常用的文符;当为1时就表示其他补充的文符。
unicode
Unicode和ISO这样的组织来统一制定的标准。
ISO取名叫UCS(Universal Character Set),Unicode取名就叫unicode了。(爹妈各叫各的)
unicode的第一个版本是用两个字节(16bit)来表示所有文符
1996年开始又来了第二个版本,用四个字节表示所有文符。这样就出现了UTF-8,UTF16,UTF-32,原理和之前肯定是完全一样的,UTF-32就是把所有的文符都用32bit也就是4个字节来表示。然后UTF-8,UTF-16就视情况而定了。UTF-8可以选择1至8个字节中的任一个来表示,而UTF-16只能是选两字节或四字节。
目前 Unicode 5.0 收录的文符已经达到99024,已超过 UTF-16 的存储范围;
UTF
unicode transformation format,unicode的交换格式。
UTF-16
用16字符2字节,或者32字符4字节,表示一个文符。可能是最初的UTF
UTF-16不需要用啥字符来做标志。所以两字节也就是2的16次能表示65536个文符。
UTF-8
可变了,实际上是用可以选择1至8个字节(8-64字符)来表示一个文符
UTF-8由于里面有额外的标志信息,所有一个字节只能表示2的7次方128个文符;两个字节只能表示2的11次方2048个文符;而三个字节能表示2的16次方,65536个文符。
由于"汉"的编码27721大于2048了所有两个字节还不够,只能用三个字节来表示。
UTF-8在局部的字节错误(丢失、增加、改变)不会导致连锁性的错误,因为 UTF-8 的字符边界很容易检测出来,所以容错性较高。
如果全部英文或英文与其他文字混合,但英文占绝大部分,用UTF-8就比UTF-16节省了很多空间,因为英文的UTF-8和ASCII占用的空间是一样的,而如果全部是中文这样类似的字符或者混合字符中中文占绝大多数.UTF-16就占优势了,因为中文的UTF-8需要用3字节,而UTF-16占2字节。
EF BB BF UTF-8
FE FF UTF-16/UCS-2, big endian
FF FE UTF-16/UCS-2, little endian
FF FE 00 00 UTF-32/UCS-4, little endian.
00 00 FE FF UTF-32/UCS-4, big-endian.
就原文来说,UTF-8和UTF-16各有优缺点,但我觉得就容错率一点来说,UTF-8就占有绝对优势,毕竟计算机和互联网的容量和速度都在不断地赶超人脑瓶颈(好吧,就是我的脑瓶颈),基本不需要再从编码上节约了,而出错总是难免的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix