码迷,mamicode.com
首页 > 编程语言 > 详细

python学习——基础(二)

时间:2015-10-16 17:12:24      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

编码(encode):unicode转化为str类型

解码(decode):将str类型转化为unicode

在python脚本中添加如下这行:

#! /usr/bin/env python   
# -*- coding: utf-8 -*-

脚本按所设置的编码类型进行保存和读取;

注:# -*- coding: utf-8 -*- 必须放在第一行或者第二行;

# /usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = ‘syc‘


print ‘中文‘.encode(‘utf-8‘)


结果:

Traceback (most recent call last):
  File "F:/hz_viking/PycharmProjects/django_demo/WebBase/WebBase/unicodePy.py", line 6, in <module>
    print ‘中文‘.encode(‘utf-8‘)
UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe4 in position 0: ordinal not in range(128)

原因:‘中文‘是str类型的;当进行编码的时候,python 就会使用 sys.defaultencoding 指明的方式来解码,然后再进行编码;sys.defaultencoding默认是 ascii编码;所以就会出现ordinal not in range(128);

解决办法:

1.

# /usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = ‘syc‘


print ‘中文‘.decode(‘utf-8‘).encode(‘utf-8‘)

先进行utf-8解码成unicode;然后再进行编码;


2.修改defaultencoding值

# /usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = ‘syc‘

import sys
reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入
sys.setdefaultencoding(‘utf-8‘)


print ‘中文‘.encode(‘utf-8‘)


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

sys.setdefaultencoding(‘utf-8‘) 
是两个不同的概念。
第一种:是指定当前程序文件的编码方式。即编译器在解析code是认为code是哪种编码方式。如果不像第一种那样指定,我们的程序中是不能以中文声明字符串的。
第二种:是指定了python的unicode类型使用何种编码来存储unicode字符串。如果不声明,默认使用ascii。

总结:在编码转换时首先要将该数据以文件定义的编码格式换成unicode码,再将这个unicode按制定的编码进行编码;




python学习——基础(二)

标签:

原文地址:http://my.oschina.net/u/257801/blog/518056

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!