文件编码

上一篇 / 下一篇  2017-09-24 21:21:10 / 个人分类:python

文件编码

 

python的字符串类型:

字节字符串

unicode字符串

创建一个字节字符串

>>> s="zhangcong"

>>> type(s)

<type 'str'>

创建一个unicode字符串

>>> t=u"zhangcong"

>>> type(t)

<type 'unicode'>

>>> "s" is u"s"

False

>>>

文件的存储和编码

记事本编辑的时候读取时,先把utf-8转换为unicode,然后保存的时候再把unicode转换为utf-8

正常文件打印中文

文件保存为utf-8的编码格式

文件加encoding=utf-8

中文符号前面加‘u’

#encoding=utf-8

print u"中国!"

C:\Users\cong>python f:\\python\\0702\\3utf-8.txt

中国!

保存ansi时不加u正常显示

#encoding=utf-8

print  "中国!"

C:\Users\cong>python f:\\python\\0702\\2ansi.txt

中国!

u会报错

#encoding=utf-8

print u"中国!"

C:\Users\cong>python f:\\python\\0702\\2ansi.txt

  File "f:\\python\\0702\\2ansi.txt", line 4

    print u"中国!"

SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xd6 in position 0: invalid continuation byte

保存ansi时代码声明为gbk时加不加u都正常显示

 

raw_input中文乱码问题:

保存为utf-8格式时:

#encoding=utf-8

string=raw_input("请输入内容:".decode("utf-8").encode("gbk"))

priint string

C:\Users\cong>python d:\\2.txt

请输入内容:zw我们

zw我们

保存为ansi格式时

#encoding=utf-8

string=raw_input("请输入内容:")

print string

#这样就不会乱码

C:\Users\cong>python d:\\2.txt

请输入内容:张工

张工

 

读取文件的内容(文件中包含中文的)

程序文件一般保存的编码格式是utf-8

如果读取的文件保存的是ansi格式就会读取出正确的内容

如果读取的文件保存的是utf-8格式   中文就会乱码

 

 

文件名字包含中文的

程序文件要保存为utf-8

1#encoding=utf-8

2、打开文件时要加u

3、如果添加的中文不加u

#向中文名字文件中写入中文

test="测试"

f=open(u"d:\\.txt","w")

f.write(test)

f.write("zhang")

f.close()

如果没有保存为utf-8的话执行时会报错

C:\Users\cong>python d:\\py\\从文件中读取中文.txt

  File "d:\\py\\从文件中读取中文.txt", line 3

    f=open(u"d:\\.txt")

SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xd5 in position 0:

invalid continuation byte

字符编码转化

先转化为unicode在转化为其他编码

encode加密 把unicode转化为其他编码操作的对象必须是unicode

decode解密 把其他编码转化

1只要是str类型,只能调用decode方法,解码为uncode

2只要是unicode,只能调用encode方法,编码为strunicode编码

 

对中文字符调用decode会报错

>>> u"zhong".decode("gbk")

u'zhong'

>>> u"中国".decode("gbk")

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

>>>

字节字符串与unicode之间的转换

>>> s="zhangcong"

>>> type(s)

<type 'str'>

>>> u=s.decode()   #把字节字符串转换为unicode

>>> u

u'zhangcong'

>>> type(u)

<type 'unicode'>

>>> u.encode() #unicode转换为字节字符串

'zhangcong'

>>> v=u.encode()

>>> v

'zhangcong'

>>> type(v)

<type 'str'>

>>>

练习:

#声明一个中文unicode,然后编码为utf-8,写入文件中,看看文件的编码是啥

#encoding=utf-8

a=u"语文"

b=a.encode("utf-8")

f=open("f:\\11.txt","w")

f.write(b)

文件的编码为utf-8

#声明一个中文unicode,然后编码为gbk,写入文件中,看看文件的编码是啥

#encoding=utf-8

a=u"语文"

c=a.encode("gbk")

f=open("f:\\11.txt","w")

f.write(c)

文件的编码为ansi

#声明一个中文unicode字符串,然后编码为utf-8写入文件中,然后编码为gbk写入文件中,看看文件的编码是什么。

#encoding=utf-8

a=u"语文"

b=a.encode("utf-8")

c=a.encode("gbk")

f=open("f:\\11.txt","w")

f.write(b)

f.write(c)

文件编码为ansi

Unicode-----utf-8----unicode------gbk-----unicode

#encoding=utf-8

 

a=u"中国"

print type(a)

print a

--------------------

<type 'unicode'>

中国

-------------------

print "*"*20

print u"unicodeutf-8"

a=a.encode("utf-8")

print type(a)

print a

********************

unicodeutf-8

<type 'str'>     #因为cmd下只支持unicodegbk编码,所以utf-8编码的会乱码

------------------------------

print "*"*20

print u"utf-8unicode"

a=a.decode("utf-8")

print type(a)

print a

********************

utf-8unicode

<type 'unicode'>

中国

-----------------------------

print "*"*20

print u"unicodegbk"

a=a.encode("gbk")

print type(a)

print a

********************

unicodegbk

<type 'str'>

中国

--------------------------------

print "*"*20

print u"gbkunicode"

a=a.decode("gbk")

print type(a)

print a

********************

gbkunicode

<type 'unicode'>

中国


TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-25  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 14594
  • 日志数: 20
  • 建立时间: 2016-10-19
  • 更新时间: 2018-01-27

RSS订阅

Open Toolbar