程序开发中,不同语言文字的显示,不同字符集之间的转换非常麻烦,在python的unicode的使用中,对这点感触颇深。所以,以下总结了python中对unicode字符处理的一些理解。

  程序存储、传输、操作字符串时,对代码中写好的字符串或者手动输入的字符串,程序会自动将这些字符串按照某种字符集编码(一般为本地系统字符编码)将字符串转换为字节码,这是字符的“解码”,将显示的字符转化为字节码;

程序中显示文字时,计算机读取一串字节,选择合适的字符集(一般为本地系统字符集)将字节码翻译为字符集中对应的字符,这些字符一般为本地存储的字符图片,然后调用系统的显示接口将这些“图片”打印在屏幕上。这是字符的“编码”,将字节码转化为可显示的字符。  如果字符的解码和编码采用的是相同的字符集,则将显示出来原始给定的字符,结果正常;如果不是同一种字符集,则有可能会出现乱码(因为相同的字节码在不同的字符集中可能对应不同的字符,一种字符集的某字符解码后的字节码在另一种字符集中编码之后可能是不同的字符)。

  为了方便的处理不同字符集编码的字符之间的相互转化,定义了unicode标准,即将世界上所有的字符统一起来,每个字符都分配一个唯一的id,作为该字符的unicode码值。在代码中写定字符或者程序输入字符后,可以先将字符转化为unicode"字符",这是“解码”过程;进行一系列操作之后,如果需要显示出原来的字符,则将unicode"字符"转化为对应的字符集中该字符所对应的字节码,然后找到对应的字符,进而显示。

  这样,不同字符集编码就通过unicode"字符"联系了起来。

  1. #直接定义unicode字符串,通过在字符串前加 u 的方式
  2. unicodestring = u"Hello world"
  3.  
  4. utf8string = '好人' #可以这样直接写,是因为在py文件的开头写了 #encoding=utf-8, 这样在整个py
  5. # 文件中,所有的字符串的编码编码方式都设置为了utf-8
  6.  
  7. #将某种字符集编码的字符串转化为unicode字符串, 即“解码”
  8. ustring = unicode(utf8string, "utf-8")
  9.  
  10. ustring # 输出 u'\u597d\u4eba'
  11. print type(ustring) # 输出 <type 'unicode'>
  12.  
  13. #将unicode字符串转化为某种字符集编码的字符串,即“编码”
  14. unicodestring.encode("utf-8")
  15. ustring.encode('utf-8')
  16.  
  17. print ustring.encode('utf-8') # 输出 好人, 解码到unicode和从unicode编码的字符集相同
  18. print ustring.encode('gbk') #输出乱码 濂戒汉, 解码到unicode和从unicode编码的字符集不同

以上部分为参考网络+自己yy,如果有错误,欢迎指正~

python unicode字符串的更多相关文章

  1. Python中Unicode字符串

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

  2. 关于python中的unicode字符串的使用

    基于python2.7中的字符串: unicode-->编码encode('utf-8')-->写入文件 读出文件-->解码decode('utf-8')-->unicode ...

  3. Python的字符串操作和Unicode

    字符串类型 str:Unicode字符串.采用''或者r''构造的字符串均为str,单引号可以用双引号或者三引号来代替.无论用哪种方式进行制定,在Python内部存储时没有区别. bytes:二进制字 ...

  4. Python Cookbook(第3版)中文版:15.14 传递Unicode字符串给C函数库

    15.14 传递Unicode字符串给C函数库¶ 问题¶ 你要写一个扩展模块,需要将一个Python字符串传递给C的某个库函数,但是这个函数不知道该怎么处理Unicode. 解决方案¶ 这里我们需要考 ...

  5. [python]去掉 unicode 字符串前面的 u(转)

    add by zhj: 其实一般情况下,不会遇到变量c这种编码的,往往是哪些出错了,才会出现这种情况.所以遇到这种情况,要先 查看代码,避免这种情况的出现 原文:https://mozillazg.c ...

  6. Python 入门(二)Unicode字符串

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

  7. Python:Base1(数据类型,print语句,变量,定义字符串,raw字符串与多行字符串,Unicode字符串,整数和浮点数运算,布尔类型运算)

    1.Python中数据类型: 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据 ...

  8. Python基础-字符串格式化_百分号方式_format方式

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  9. python(七)字符串格式化、生成器与迭代器

    字符串格式化 Python的字符串格式化有两种方式:百分号方式.format方式 1.百分号的方式 %[(name)][flags][width].[precision]typecode (name) ...

随机推荐

  1. 使用Keil的MicroLIB时自动设置堆大小——玩嵌入式以来最高难度

    Keil编译项目,如果使用微库MicroLIB,就可以使用malloc.微库内部位置一个堆管理模块.芯片的RAM大小是固定了的,前面分为全局变量,后面分给堆和栈,这是一般开发方式.但是我们在开发项目的 ...

  2. sqlserver2008安装教程

    这几天因为需要,一直想安装sql server 2008来作为Web后台的数据库进行些实验,但总是没有时间,今天终于有时间了,便安装了SQL Server 2008,以下是我的安装的步骤,希望对于有需 ...

  3. java-cmd-命令行编译和运行java文件

    一.使用的工具 1.javac 2.java 二.命令 项目目录只这样的 D:/project/src/com/example/Child.java D:/project/src/com/exampl ...

  4. bmp格式图片文件读取

    C++读取bmp图片 #include <windows.h> #include <stdio.h> #include <stdlib.h> #include &l ...

  5. 【leetcode❤python】141. Linked List Cycle

    #-*- coding: UTF-8 -*- #Method:快慢指针法,建立虚表头,快指针走两步,慢指针走一步,若存在环,则快指针会追上慢指针# Definition for singly-link ...

  6. Dancing Links

    Dancing Links用来解决如下精确匹配的问题: 选择若干行使得每一列恰好有一个1.Dancing Links通过对非零元素建立双向十字循环链表.上面的例子建立的链表如下所示: 计算的时候使用搜 ...

  7. Hibernate实体类注解

    常用的hibernate annotation标签如下: @Entity --注释声明该类为持久类.将一个Javabean类声明为一 个实体的数据库表映射类,最好实现序列化.此时,默认情况下,所有的类 ...

  8. CUBRID学习笔记 24 数据类型1

    ---恢复内容开始--- 一 数字类型  注意小数的四舍五入问题 1数字型 Type Bytes Mix Max Exact/approx. SHORTSMALLINT 2 -32,768 32,76 ...

  9. hdu 1247 map的使用

    http://acm.hdu.edu.cn/showproblem.php?pid=1247 Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    ...

  10. Strategy策略模式

    策略模式定义了一系列算法,把它们一个个封装起来,并且使它们可相互替换.该模式可使得算法能独立于使用它的客户而变化.Strategy模式是行为模式,正因为他是一种行为模式,所以他不是用来解决类的实例化的 ...