python学习——基础(二)
博客专区 > 随性_ 的博客 > 博客详情
python学习——基础(二)
随性_ 发表于2年前
python学习——基础(二)
  • 发表于 2年前
  • 阅读 60
  • 收藏 3
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: python中文问题

编码(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按制定的编码进行编码;




共有 人打赏支持
粉丝 8
博文 16
码字总数 18722
×
随性_
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: