Python中文
在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中文的更多相关文章
- 【原】python中文文本挖掘资料集合
		
这些网址是我在学习python中文文本挖掘时觉得比较好的网站,记录一下,后期也会不定期添加: 1.http://www.52nlp.cn/python-%E7%BD%91%E9%A1%B5%E7% ...
 - Eclipse搭建Python开发环境+Python中文处理
		
1.基本需求 1.Eclipse 集成开发环境下载 http://115.com/file/c2vz7io5 JDK6下载 http://115.com/file/c2vz7idq 2. ...
 - python中文处理之encode/decode函数
		
python中文处理相信迷惑过不少同学.下面说说python2/3的encode和decode函数. python2中,使用decode()和encode()来进行解码和编码,以unicode类型作为 ...
 - Python中文字符的理解:str()、repr()、print
		
Python中文字符的理解:str().repr().print 字数1384 阅读4 评论0 喜欢0 都说Python人不把文字编码这块从头到尾.从古至今全研究通透的话是完全玩不转的.我终于深刻的理 ...
 - python中文注释及输出出错
		
今天开始接触python,中文报错,你懂的,不细说. 网上很多类似的解决方案,有不是很明确,例如:http://blog.csdn.net/chen861201/article/details/770 ...
 - Python中文繁简体转换工具
		
Openccpy ___ _____ __ ___ ___ ___ _____ __ __ / __`\/\ '__`\ /'__`\/' _ `\ /'___\ /'___\/\ '__`\/\ \ ...
 - Python中文语料批量预处理手记
		
手记实用系列文章: 1 结巴分词和自然语言处理HanLP处理手记 2 Python中文语料批量预处理手记 3 自然语言处理手记 4 Python中调用自然语言处理工具HanLP手记 5 Python中 ...
 - 共有11款Python 中文分词库开源软件
		
件过滤: 排序: 收录时间 | 浏览数 Python 中文分词库 Yaha "哑哈"中文分词,更快或更准确,由你来定义.通过简单定制,让分词模块更适用于你的需求. "Ya ...
 - 【已解决】python中文字符乱码(GB2312,GBK,GB18030相关的问题)
		
http://againinput4.blog.163.com/blog/static/1727994912011111011432810/ [已解决]python中文字符乱码(GB2312,GB ...
 - Python中文分词组件 jieba
		
jieba "结巴"中文分词:做最好的Python中文分词组件 "Jieba" Feature 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分 ...
 
随机推荐
- Linux硬链接和软连接详解
			
硬链接: 硬链接是通过索引节点inode来进行链接的(关于inode,http://www.cnblogs.com/ZGreMount/p/7653307.html).在Linux(ext2,ext3 ...
 - 媲美jQuery的JS框架——AngularJS(一)
			
前言 相信原生JS大家都不陌生,至于为什么说原生,是因为在JS的基础上衍生出了很多的框架.有些框架的使用非常广泛,甚至已经达到了媲美原生的地步.在之前的文章中给大家介绍了jQuery这一介绍框架.今天 ...
 - 干了这杯Java之LinkedList
			
LinkedList和ArrayList一样实现了List接口 ArrayList内部为数组 LinkedList内外为双向链表 实现了Deque接口,双端列队的实现 图片来自Wiki 内部实现为No ...
 - ABAP 选择屏幕创建标签页
			
*&---------------------------------------------------------------------* *& Report ZTEST_TAB ...
 - Linux-问题集锦(1)
			
一. 某用户只读特定文件夹 只读目录 : /home/www/yqz/logs 1. 创建用户 useradd ReadOnly passwd ReadOnly 2. ...
 - Windows-universal-samples-master示例 XamlCommanding
			
Windows-universal-samples-master XamlCommanding 运行默认如果是 ARM会出现没有引用System,只要在调试选择CPU为PC的就好 默认 选择PC平台 ...
 - 【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用
			
[网络爬虫入门05]分布式文件存储数据库MongoDB的基本操作与爬虫应用 广东职业技术学院 欧浩源 1.引言 网络爬虫往往需要将大量的数据存储到数据库中,常用的有MySQL.MongoDB和Red ...
 - 虚拟机VMware-workstation-full-12.5.2安装注册方法(附安装包下载链接)
			
首先,需要下载好虚拟机的安装包: 链接:http://pan.baidu.com/s/1mix3fFa 密码:6ftu 下载好后,双击安装程序,弹出安装界面,然后按照红色圈圈的指示进行安装操作,完成安 ...
 - FreeType in OpenCASCADE
			
FreeType in OpenCASCADE eryar@163.com Abstract. FreeType is required for text display in the 3D view ...
 - Java 递归调用 recursive  给一个参数 返回一大堆
			
需求: 需要组装成对象多层嵌套式的 json字符串; 想到使用 递归来完成这个多层嵌套: 憋了四个小时,终于写出来了; 先看效果: 数据库中的数据: 拼装后的效果: [ EmpVO{ ename='孙 ...