在python中有两种默认的字符串:str和unicode。在Python中一定要注意区分“Unicode字符串”和"Unicode对象”的区别。

后面所有的“Unicode字符串”都是指"Unicode对象”。

一个传统的字符串完全可以用str对象表示,它仅仅是一个字节流,除非解码为unicode对象,否则没有任何实际意义。

一开始先上例子

>>> s='哈哈'
>>> s
'\xe5\x93\x88\xe5\x93\x88'
>>> type(s)
<type 'str'>
>>>
>>> ss = u'哈哈'
>>> ss
u'\u54c8\u54c8'
>>> type(ss)
<type 'unicode'>

ss声明为unicode

>>> u = s.decode('utf8')
>>> u
u'\u54c8\u54c8'
>>> print u
哈哈
>>>
>>> u = s.decode('utf-16')
>>>
>>> u
u'\u93e5\ue588\u8893'
>>> print u
鏥袓

将字符串s(utf8编码)使用decode进行解码后,可以得到同等得unicode对象,和直接声明为unicode的ss一样

>>> u=ss.decode('utf8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/sinasrv2/lib/python2.7/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
>>> u=ss.encode('utf8')
>>> u
'\xe5\x93\x88\xe5\x93\x88'
>>> print u
哈哈

可以将unicode对象编码encode成其他字符集,不能进行解码decode,decode是针对utf8、GBK编码来说的

下面再给一个例子进行说明:

1、先声明一个unicode对象

2、将其编码成gbk

3、直接print出现不显示

4、使用decode解码成GBK,正确显示

>>> ss = u'哈哈'
>>> ss
u'\u54c8\u54c8'
>>> t = ss.encode('gbk')
>>> t
'\xb9\xfe\xb9\xfe'
>>> print t >>>
>>> print t.decode('gbk')
哈哈

序列化unicode对象

>>> str(ss)
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)

向文件直接输出ss会抛异常。在处理unicode中文字符串的时候,必须首先对它调用encode函数,转换成其他编码输出。

总结:在Python中,str对象就是一个字节数组,至于里面的内容是不是一个合法的字符串,以及这个字符串采用什么编码都不重要。

这些内容需要用户自己记录和判断。这个限制也同样适用于unicode对象。要记住unicode对象中的内容可绝对不一定就是合法的unicode字符串。

【参考链接】

1、http://blog.csdn.net/mayflowers/article/details/1568852

Python中文的更多相关文章

  1. 【原】python中文文本挖掘资料集合

    这些网址是我在学习python中文文本挖掘时觉得比较好的网站,记录一下,后期也会不定期添加:   1.http://www.52nlp.cn/python-%E7%BD%91%E9%A1%B5%E7% ...

  2. Eclipse搭建Python开发环境+Python中文处理

    1.基本需求 1.Eclipse 集成开发环境下载 http://115.com/file/c2vz7io5    JDK6下载 http://115.com/file/c2vz7idq     2. ...

  3. python中文处理之encode/decode函数

    python中文处理相信迷惑过不少同学.下面说说python2/3的encode和decode函数. python2中,使用decode()和encode()来进行解码和编码,以unicode类型作为 ...

  4. Python中文字符的理解:str()、repr()、print

    Python中文字符的理解:str().repr().print 字数1384 阅读4 评论0 喜欢0 都说Python人不把文字编码这块从头到尾.从古至今全研究通透的话是完全玩不转的.我终于深刻的理 ...

  5. python中文注释及输出出错

    今天开始接触python,中文报错,你懂的,不细说. 网上很多类似的解决方案,有不是很明确,例如:http://blog.csdn.net/chen861201/article/details/770 ...

  6. Python中文繁简体转换工具

    Openccpy ___ _____ __ ___ ___ ___ _____ __ __ / __`\/\ '__`\ /'__`\/' _ `\ /'___\ /'___\/\ '__`\/\ \ ...

  7. Python中文语料批量预处理手记

    手记实用系列文章: 1 结巴分词和自然语言处理HanLP处理手记 2 Python中文语料批量预处理手记 3 自然语言处理手记 4 Python中调用自然语言处理工具HanLP手记 5 Python中 ...

  8. 共有11款Python 中文分词库开源软件

    件过滤: 排序: 收录时间 | 浏览数 Python 中文分词库 Yaha "哑哈"中文分词,更快或更准确,由你来定义.通过简单定制,让分词模块更适用于你的需求. "Ya ...

  9. 【已解决】python中文字符乱码(GB2312,GBK,GB18030相关的问题)

      http://againinput4.blog.163.com/blog/static/1727994912011111011432810/ [已解决]python中文字符乱码(GB2312,GB ...

  10. Python中文分词组件 jieba

    jieba "结巴"中文分词:做最好的Python中文分词组件 "Jieba" Feature 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分 ...

随机推荐

  1. mysql explain 分析sql语句

    鉴于最近做的事情,需要解决慢sql的问题,现补充一点sql语句性能分析之explain的使用方式! 综合返回数据情况,分析各个参数,可以了解sql 使用方法:explain  + sql语句 如 :e ...

  2. sql 时间格式

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

  3. ios 指定页面禁用第三方键盘,使用系统的键盘

    因为项目需要,需要在添加银行卡和提现页面使用数字键盘, 如果用户没有安装第三方键盘是没啥大问题的,但是如果用户手机安装了第三方的键盘的话,有时候会无法调用起第三方的数字键盘,或者第三方键盘样式不符合, ...

  4. Babylon.GUI官方文档翻译

    Babylon.GUI是一个基于Babylon.js的WebGL库,可以用来在WebGL3D场景中生成交互性UI与动态纹理.相比于html ui,Babylon.GUI的功能较为简化,但使用起来也更加 ...

  5. Spring装配Bean之组件扫描和自动装配

    Spring从两个角度来实现自动化装配: 组件扫描:Spring会自动发现应用上下文中所创建的bean. 自动装配:Spring自动满足bean之间的依赖. 案例:音响系统的组件.首先为CD创建Com ...

  6. fedora 19 gnome 3.8 关闭笔记本盖子的动作

    gnome-tweak-tool里没有了相关选项,但是又想让关闭盖子不挂起,后来看看才知道gnome3.8不再提供这功能,而是交给systemd来处理,所以估计用dconf-edit在gnome的po ...

  7. 如何利用Oracle VM Templates 在几分钟内部署Oracle Real Application Clusters (RAC)

    本文未经授权,禁止一切形式的转载.如果对本文有任何疑问可以通过以下方式和我交流: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiang ...

  8. OSW 快速安装部署

    关于在运行Oracle的环境下部署OSW具体好处不再多说,只需要知晓,在日常Oracle定位各类故障,osw的数据可以协助诊断问题.MOS很多文档也多处提到需要osw的监控数据. 一.前期资料准备 1 ...

  9. LeetCode 39. Combination Sum (组合的和)

    Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique c ...

  10. linux root修改密码失败

    问题: 当使用root修改密码时,报错passwd:Authentication token manipulation error 解决: 1.查看是否权限问题, /etc/passwd /etc/s ...