关于python中的unicode字符串的使用
基于python2.7中的字符串:
unicode——》编码encode('utf-8')——》写入文件
读出文件——》解码decode('utf-8')——》unicode
在使用unicode的时候,必须注意以下的原则:
1、 程序中出现字符串的地方加前缀u,表示为unicode类型
2、不要使用str函数,在使用的时候使用unicode函数
3、不要使用string模块
4、只有在写入文件或者数据库或者网络的时候,才使用encode函数来进行编码发送;只有在把数据读取回来的时候,才使用decode进行解码
在使用读写unicode数据库的时候,注意几个方面:
1、数据库服务器,例如mysql,只要每个表使用utf-8格式来进行编码即可
2、数据库适配器,例如mysqldb,在connect()方法中使用use_unicode方法
3、web开发框架,例如django,进行更多的设置
#!/usr/bin/env python
#-*- coding:utf-8 -*- #声明为unicode编码文件,否则会报错 CODEC = 'utf-8'
FILE = 'unicode.txt' hello_out = u'Hello KEL,中文测试\n'
bytes_out = hello_out.encode('utf-8') #在写入文件的时候进行编码为utf-8,从而保存在文件中的编码为utf-8
f = open(FILE,'w')
f.write(bytes_out)
f.close() f = open(FILE,'r')
hello_in = f.read()
bytes_in = hello_in.decode(CODEC)#读出文件的时候,进行解码,从utf-8进行解码,解码为unicode类型
f.close()
print bytes_in,
以上的程序为当写入文件的时候,必须进行编码,从而在文件中保存为正确的编码格式;在读出文件的时候,进行适当的解码,从而转换为unicode编码来进行处理。
在进行使用unicode编码的时候,必须声明此文件使用的编码类型,否则会报错,报错内容如下:
[root@python 48]# python uniFile.py
File "uniFile.py", line 6
SyntaxError: Non-ASCII character '\xe4' in file uniFile.py on line 6,
but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
python对unicode的支持:
1、内建的unicode函数,用来生成unicode函数——通过一个字节串和编码方法显式的创建一个unicode字符串,通常不指定编码方式的字节串是没有任何意义的。
>>> kel = unicode('kel','utf-8')
>>> print kel
kel
>>> kel
u'kel'
2、内建的decode方法和encode方法,一个是进行编码,一个是进行解码
3、unicode字符串对象是basestring的子类,使用u或者U来创建实例,在支持原始字符串的时候,可以使用ur或者UR,u必须写在r的前面
>>> kel = ur'this is 汉字'
>>> kel = ru'this is 汉字'
File "<stdin>", line 1
kel = ru'this is 汉字'
^
SyntaxError: invalid syntax
4、 在对象中,如果一个对象包含一个__unicode__()方法,那么可以将一个对象转换为unicode对象
>>> kel = '汉字'
>>> kel
'\xe6\xb1\x89\xe5\xad\x97'
>>> kel.encode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)
在进行编码解码的时候,默认是使用ascii编码来进行解码,如果出现以上错误,或者是UnicodeEncodeError,那么均表示为在进行编码或解码的时候不正确,没有正确的创建一个unicode对象。
1、 无论何时,当你的程序接收到来自网络或者文件或者用户输入等的时候,应当立即创造一个unicode对象,找出最合适的编码,使用decode来进行创建unicode对象。
2、无论何时,当你的程序要发送文本数据到网络或者写入文件或者输出等的时候,应该探查正确的编码,并用呢种编码将你的文本转变为字节串,使用encode方法来进行发送数据
创建一个unicode字符串:
>>> kel = unicode('中文string','utf-8')
>>> print kel
中文string
将unicode转变为python字符串:
>>> kel = unicode('中文string','utf-8')
>>> print kel.encode('utf-8')
将python字符串转变为unicode:
>>> kel = unicode('中文string','utf-8').encode('utf-8').decode('utf-8')
>>> print kel
中文string
将unicode对象转变为字节串,称之为对该字符串进行编码;
从基于字节的对象中载入一个unicode字符串,必须对齐进行解码,将从字节串转换为字符,也就是unicode对象
当处理字节串和unicode编码的时候:
会将字节串转换成unicode编码,在隐式的情况下,并且假设字节串为ascii编码,如果包含非ascii编码,那么将会有unicodedecodeerror的异常发生。
在默认进行转换的时候,都是使用ascii编码进行转换。——从而在每次报错的时候,都是ascii异常编码或者解码异常,
关于python中的unicode字符串的使用的更多相关文章
- python学习第九讲,python中的数据类型,字符串的使用与介绍
目录 python学习第九讲,python中的数据类型,字符串的使用与介绍 一丶字符串 1.字符串的定义 2.字符串的常见操作 3.字符串操作 len count index操作 4.判断空白字符,判 ...
- 简介Python中用于处理字符串的center()方法
简介Python中用于处理字符串的center()方法 这篇文章主要介绍了简介Python中用于处理字符串的center()方法,是Python入门中的基础知识,需要的朋友可以参考下 center() ...
- Python 中的反转字符串:reversed()、切片等
摘要:以相反的顺序反转和处理字符串可能是编程中的一项常见任务.Python 提供了一组工具和技术,可以帮助您快速有效地执行字符串反转. 本文分享自华为云社区<Python 中的反转字符串:rev ...
- python 中的unicode详解
通过例子来看问题是比较容易懂的. 首先来看,下面这个是我新建的一个txt文件,名字叫做ivan_utf8.txt,然后里面随便编辑了一些东西. 然后来用控制台打开这个文件,同样也是截图: 这里就是简单 ...
- Python中的Unicode编码和UTF-8编码
下午看廖雪峰的Python2.7教程,看到 字符串和编码 一节,有一点感受,结合崔庆才的Python博客 ,把这种感受记录下来: ASCII码:是用一个字节(8bit, 0-255)中的127个字母表 ...
- 【循序渐进学Python】3. Python中的序列——字符串
字符串是零个或多个的字符所组成的序列,字符串是Python内建的6种序列之一,在Python中字符串是不可变的. 1. 格式化字符串 字符串格式化使用字符串格式化操作符即百分号%来实现.在%左侧放置一 ...
- Python中的反转字符串问题
按单词反转字符串是一道很常见的面试题.在Python中实现起来非常简单. def reverse_string_by_word(s): lst = s.split() # split by blank ...
- Python中print/format字符串格式化实例
Python 字符串格式化使用 "字符 %格式1 %格式2 字符"%(变量1,变量2),%格式表示接受变量的类型.简单的使用例子如下 # 例:字符串格式化Name = '17jo' ...
- python中,获取字符串的长度
说明: 与其他的语言一样,有时候需要查看或者说计算字符串的长度.在此记录下python中通过哪个函数实现. 操作过程: 1.通过len()函数返回字符串的长度 >>> text='p ...
随机推荐
- Spring事务的来龙去脉
引言 Spring是一个IOC框架,在IOC框架的基础上,提供了DAO集成,AOP事务控制,JNDI等等一系列的高级功能,个人觉得,在Spring中最值得称道的不仅仅它是一个非入侵的IOC容器,而在于 ...
- 如何给桌面搬家(Win XP)
是不是习惯把一些常用的文件放在桌面上?或者接收个文件就直接放桌面了,这样用起来方便点. 可是一旦你重装系统或者恢复系统,桌面又回到了以前的状态,很多的文件就丢了.小心的话,重做系统前会做个备份.但如果 ...
- [HDOJ1160]FatMouse's Speed(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 FatMouse believes that the fatter a mouse is, th ...
- 【转】 xcode中常用快捷键图文并茂解释
图文解释XCode常用快捷键的使用 分类: iOS开发经验技巧2012-06-07 10:21 12774人阅读 评论(6) 收藏 举报 xcodecommand工具eclipsedeletego 刚 ...
- Ajax的简单请求案例
$.ajax({ url : rootPath +'/jasframework/choosepilecontrol/querySubsytem.do', type : "POST" ...
- ogre--hlsl--矩阵
重要注释——矩阵的顺序:有一件事需要牢记,HLSL允许你使用2种不同方式处理矩阵和向量相乘——mul(v,m)或者mul(m,v).二者之间唯一的区别就是矩阵被有效地变换.在OGRE中传递矩阵你应该使 ...
- document.body.innerHTML用jquery如何表示
$("body").html('XXXX'); //这个是赋值 $("body").html(); //这个是获取HTML的内容
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是总结了网上好多人写的文章,我只是汇总一下,加上部分自己的东西,在这里感谢所有在网 ...
- KVC&KVO&NSNotification
KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性.KVO 就是基于 KVC 实现的关键技术之一. 一个对象拥有某些属性.比如说,一个 ...
- poj 1236 Network of Schools(强连通、缩点、出入度)
题意:给出一个有向图.1:问至少选出多少个点,才能沿有向边遍历所有节点.2:问至少加多少条有向边,使原图强连通. 分析:第一个问题,缩点后找所有树根(入度为0).第二个问题,分别找出入度为0和出度为0 ...