编码

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

文件开始的字节

文件格式大概有四类,分别对应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()
相关文章
相关标签/搜索
每日一句
    每一个你不满意的现在,都有一个你没有努力的曾经。
本站公众号
   欢迎关注本站公众号,获取更多程序园信息
开发小院