1. Unicode是什么

Unicode是对字符进行编码的一种标准。而utf8或者utf-8是根据Unicode的标准实现的一种存储方式。

2. Python中的Unicode

>>> u'furzoom'  # <--- Unicode string
u'furzoom'
>>> 'furzoom' # <--- ascii string
'furzoom'
>>> '在'
'\xe5\x9c\xa8'
>>> '在'.decode('utf8')
u'\u5728'
>>> '在'.decode('utf8').encode('utf8')
'\xe5\x9c\xa8'

3. 编码与解码

目前一般都建议在编程Python脚本时采用UTF-8的编码形式,这个指的文件的编码形式。Python内部是采用Unicode表示的。在Python中写下一行u'furzoom',它是Unicode字符串。如果是'furzoom',它的编码方式与该脚本文件的编码方式是一致的。如果要把该字符串存储到文件中,期望其他程序能够正确的解决字符串,该怎么办呢?

如果是Unicode字符串,需要指定用什么样的编码方式来编码字符串,通过的做法是采用UTF-8的方式。同时从文件中读取时,就是一个逆向的过程。看下面的例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*- """
An example of reading and writing Unicode strings: Writes a Unicode
string to a file in utf-8 and reads it back in.
""" CODEC = 'utf-8'
FILE = 'unicode.txt' hello_out = u'Hello Furzoom\n'
bytes_out = hello_out.encode(CODEC)
f = open(FILE, 'w')
f.write(bytes_out)
f.close() f = open(FILE, 'r')
bytes_in = f.read()
f.close()
hello_in = bytes_in.decode(CODEC)
print hello_in

4. 在应用中使用Unicode的建议

  • 程序中出现字符串时一定要加个前缀u。
  • 不要用str()函数,用unicode()代替。
  • 不用string模块,对Unicode支持的不好。
  • 不到必须时,不要在程序中编解码Unicode字符。只在要写入文件或数据库或者网络时,才进行编码。相反的过程才进行解码。

Python序列——Unicode的更多相关文章

  1. python学习笔记:python序列

    python序列包括字符串.列表和元组三部分,下面先总的说一下python序列共有的一些操作符和内建函数. 一.python序列 序列类型操作符 标准类型的操作符一般都能适用于所有的序列类型,这里说一 ...

  2. Python序列类型

    Python序列类型 序列:字符.列表.元组 所有序列都支持迭代 序列表示索引为非负整数的有序对象集合 字符和元组属于不可变序列,列表可变 1)字符 字符串字面量:把文本放入单引号.双引号或三引号中: ...

  3. python序列和其它类型的比较

    序列对象可以与相同类型的其他对象比较.它们使用 字典顺序 进行比较:首先比较两个python序列的第一个元素,如果不同,那么这就决定了比较操作的结果.如果它们相同,就再比较每个序列的第二个元素,以此类 ...

  4. Python序列——字符串

    字符串 1 string模块预定义字符串 2 普通字符串与Unicode字符串 3 只适用于字符串的操作 4 原始字符串 5 Unicode字符串操作符 内建函数 1 标准类型函数与序列操作函数 2 ...

  5. Python 序列操作符与函数(字符串)

    Python序列包括:元组.列表.字符串. 1.1 序列共同支持的函数: 函数 功能 说明 cmp(seq1,seq2) 比较序列大小 从左到右依次比较,直到比较出大小 len(seq1) 获取序列长 ...

  6. Python中Unicode字符串

    Python中Unicode字符串 字符串还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte ...

  7. [Python笔记][第二章Python序列-复杂的数据结构]

    2016/1/27学习内容 第二章 Python序列-复杂的数据结构 堆 import heapq #添加元素进堆 heapq.heappush(heap,n) #小根堆堆顶 heapq.heappo ...

  8. [Python笔记][第二章Python序列-tuple,dict,set]

    2016/1/27学习内容 第二章 Python序列-tuple tuple创建的tips a_tuple=('a',),要这样创建,而不是a_tuple=('a'),后者是一个创建了一个字符 tup ...

  9. [python笔记][第二章Python序列-list]

    2016/1/27学习内容 第二章 Python序列-list list常用操作 list.append(x) list.extend(L) list.insert(index,x) list.rem ...

随机推荐

  1. tr命令用法

    原文链接 # echo "abcd"|tr 'a' 'b' bbcd tr 命令 用途 转换字符. 语法 tr [ -c | -cds | -cs | -C | -Cds | -C ...

  2. inotify+rsync实现实时同步(附解决crontab中无法执行python脚本的问题)

    1.准备环境 # 系统支持的话,下面的目录就会存在 ls /proc/sys/fs/inotify/ rpm -qa inotify-tools yum -y install inotify-tool ...

  3. 利用注解和反射,将Bean枚举字段的值填入相应的字段中,并转化为fastjson返回前台

    需求:需要将枚举类型的字段例如enable(是否启用)转化为enable:1,enableName:是.这种形式返回给前台. 思路:在bean字段上加上枚举类型的注解,通过字段的值和枚举类反射获取枚举 ...

  4. 左偏树 / 非旋转treap学习笔记

    背景 非旋转treap真的好久没有用过了... 左偏树由于之前学的时候没有写学习笔记, 学得也并不牢固. 所以打算写这么一篇学习笔记, 讲讲左偏树和非旋转treap. 左偏树 定义 左偏树(Lefti ...

  5. 为什么硬盘明明还有空间,linux却说硬盘空间不足?inode;mkdir: 无法创建目录"shen1": 设备上没有空间

    现象:df -h显示硬盘还有14G空间,但是touch file/mkdir directory都失败,提示硬盘没有空间 原因:df -ia查看下inode的使用情况,发现已经爆了,(下图显示使用88 ...

  6. vue Syntax Error: Unexpected token {

    > music@1.0.0 dev F:\music\music> node build/dev-server.js > Starting dev server...ERROR Fa ...

  7. List&lt;InvestInfoDO&gt; invest = advertiseDao6.qryInvestInfo(InvestInfoDO1);怎样获得list的实体类;

    List<InvestInfoDO>  invest = advertiseDao6.qryInvestInfo(InvestInfoDO1); 怎样获得List的实体类呢,就是怎样获得I ...

  8. 用Visual C++ 2010 载入动态链接库三部曲(使用第三方库的一般方法)

    以下以载入编译好的ACE动态链接库为例说明:这里如果你已经设置了环境变量ACE_ROOT ACE在VS2010下高速配置载入动态链接库三部曲:(这里如果你的ACE文件夹为E:\ACE_wrappers ...

  9. Allegro基本操作——PCB布线

    转:http://blog.sina.com.cn/s/blog_1538bc9470102vyyq.html http://www.elecfans.com/article/80/110/2010/ ...

  10. kubernetes高级之pod安全策略

    系列目录 什么是pod安全策略 pod安全策略是集群级别的用于控制pod安全相关选项的一种资源.PodSecurityPolicy定义了一系列pod相要进行在系统中必须满足的约束条件,以衣一些默认的约 ...