编码

有一个地方要注意,
编码和文件种类是两个概念

文件开始的字节

文件格式大概有四类,分别对应notepad++encoding列表的四个
file_struct
它们的区别是文件开头的字节

utf 8
utf 8 bom\xef\xbb\xbf
unicode be\xfe\xff
unicode le\xfe\xff

编码

还有一点是unicode 和gbk是重合的。
unicode 是定长的(任何字符都是两字节,python中一个字的长度是1,尽管实际上占了2字节,len("我是猪")==3,以及源码文件是unicode编码的。
unicode 相关的其他还没有弄明白。

测试代码

测试代码先放在这里:

# -*- coding: utf-8 -*-

f=open("unicode.txt","w")
f.write("我是猪")
f.close()


f=open("gbk.txt","w",encoding='gbk')
f.write("我是猪")
f.close()

f=open("utf8.txt","w",encoding='utf-8')
f.write("我是猪")
f.close()

print("only test: ")
print("我是猪".encode())
print("我是猪".encode("utf-8"))
print("我是猪".encode("gbk"))
print(len("我是猪"))
print(len("我是猪123"))
print(len(u"我是猪"))
print(len(u"我是猪123"))

print("000我是猪".encode())
print("000我是猪".encode("utf-8"))
print("000我是猪".encode("gbk"))

print("unicode")
f=open("unicode.txt","rb")
x=f.read()
print(x,x.decode("gbk"))
f.close()


print("utf8 bom")
f=open("utf8bom.txt","rb")
x1=f.read()
print(x1,x1.decode())
f.close()

print("unicode be")
f=open("unicode_be.txt","rb")
x2=f.read()
print(len(x2),x2)
f.close()

print("unicode le")
f=open("unicode_le.txt","rb")
x3=f.read()
print(len(x3),x3)
f.close()

f=open("utf8.txt","r",encoding="utf-8")
print(f.read())
f.close()

f=open("utf8bom.txt","r",encoding="utf-8")
print(f.read())
f.close()

f=open("unicode.txt","r")
print(f.read())
f.close()

f=open("unicode_be.txt","r",encoding="gbk")
#print(f.read())#?????
f.close()

f=open("unicode_le.txt","r",encoding="gbk")
#print(f.read())#?????
f.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值