Python中Unicode 字符串

jn691121 2013-03-11 09:57:44
Unicode 字符串

  从Python2.0开始,程序员们可以使用一种新的数据类型来存储文本数据:Unicode 对象。它可以用于存储多 种Unicode数据(请参阅 http://www.unicode.org/ ),并且,通过必要时的自动转换,它可以与现有的字符串 对象良好的结合。

  Unicode针对现代和旧式的文本中所有的字符提供了一个序列。 以前,字符只能使用256个序号,文本通常通过 绑定代码页来与字符映射。这很容易导致混乱,特别是软件的国际化(internationalization–通常写 做“i18n”–“i”+18 characters +“n”)。Unicode通过为所有字符定义一个统一的代码页解决了这个问 题。

  Python中定义一个Unicode字符串和定义一个普通字符串一样简单:

  >>> u’Hello World !’ u’Hello World !’

  引号前小写的“u”表示这里创建的是一个Unicode字符串。如果你想加入一个特殊字符,可以使用Python的

  Unicode-Escape 编码。如下例所示:

  >>> u’Hello\u0020World !’ u’Hello World !’

  被替换的 \u0020 标识表示在给定位置插入编码值为 0×0020 的 Unicode字符(空格符)。 其它字符也会被直接解释成对应的Unicode码。如果你有一个在西方国家常用的Latin-1编码字符串,你可以发

  现Unicode字符集的前256个字符与Lation-1的对应字符编码完全相同。

  另外,有一种与普通字符串相同的行模式。想要使用Python的Raw-Unicode-Escape 编码,你需要在字符串的引 号前加上 ur 前缀。如果在小写“u”前可能有不止一个反斜杠,它只会把那些单独的 \uXXXX 转化为Unicode字 符。

  >>> ur’Hello\u0020World !’ u’Hello World !’

  >>> ur’Hello\\u0020World !’ u’Hello\\\\u0020World !’

  行模式在你需要输入很多个反斜杠时很有用,可能会用于正规表达式。 作为这些编码标准的一部分,Python提供了一个完备的方法集用于从已知的编码集创建Unicode字符串。 内置函数unicode() 提供了访问(编码和解码)所有已注册的Unicode编码的方法。它能转换众所周知的 Latin-1,

  ASCII, UTF-8, 和 UTF-16。后面的两个可变长编码字符集用一个或多个byte存储Unicode字符。 默认的字符集

  是 ASCII ,它只处理0到127的编码,拒绝其它的字符并返回一个错误。当一个Unicode字符串被打印、写入文

  件或通过str()转化时,它们被替换为默认的编码。

  >>> u”abc” u’abc’

  >>> str(u”abc”)

  ’abc’

  >>> u”äöü” u’\xe4\xf6\xfc’

  >>> str(u”äöü”)

  Traceback (most recent call last): File “”, line 1, in ?

  UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-2: ordinal not in range(128)

  要把一个Unicode字符串用指定的字符集转化成8位字符串,可以使用Unicode对象提供的encode()方法,它有一 个参数用以指定编码名称。编码名称小写。

  >>> u”äöü”.encode(‘utf-8′)

  ’\xc3\xa4\xc3\xb6\xc3\xbc’

  如果你有一个特定编码的字符串,想要把它转为Unicode字符集,,可以使用uncode()函数,它以编码名做为第 二个参数。

  >>> unicode(‘\xc3\xa4\xc3\xb6\xc3\xbc’, ‘utf-8′)

  u’\xe4\xf6\xfc
转自:http://www.jeapedu.com/blog/?cat=4
...全文
668 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChongQingJin28 2013-03-12
  • 打赏
  • 举报
回复
看了看你的博客。觉得应该和你说句话。

启功去找溥心畬先生去求教如何作画的时候,溥心畬先生只是问:“你写字了吗?你读诗了吗?”,然后又说:“如果你懂得了书法与诗,那你就会画画了”。

如果程序也是一副画,那写字是什么,读诗又是什么?写字是为的什么?读诗又是为的什么?

我好像知道了写字是什么了,但还不知道读诗是什么 !

我也问你一个问题 :“你读书了吗?”。如果你读了,那仅仅说明你拿起了笔,离写好字还差的很远 !
bugs2k 2013-03-11
  • 打赏
  • 举报
回复
补充一点:
a = u'\xb3\xc2\xbd\xa8\xc3\xf4'
print a.encode('raw-unicode-escape')
print a.encode('unicode-escape').decode('string-escape')
print a.encode('raw-unicode-escape').decode('gbk')
print a.encode('unicode-escape').decode('string-escape').decode('gbk')

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧