Python如何将Unicode中文字符串转换成 string字符串

Python如何将Unicode中文字符串转换成 string字符串,第1张

Unicode字符串可以用多种方式编码为普通字符串,假设unicodestring = u"Hello world",依照所选择的编码(encoding),如下:

1、#将Unicode转换成普通的Python字符串:"编码(encode)"。

2、 #将普通的Python字符串转换成Unicode: "解码(decode)"。

扩展资料:

Python转换字符和字符串的原因:为了处理不适合用ASCII字符集表示的数据。

在以ASCII码为中心的语言和环境中,字节和字符被当做相同的事物。由于一个字节只能有256个值,这些环境就受限为只支持256个字符Unicode码,另一方面,有数万个字符,那意谓着每个Unicode字符占用多个字节,因此,你需要在字符和字节之间作出区别。

(1)UTF-8编码能处理任何的Unicode字符。它也是与ASCII码向后兼容的,因此一个纯粹的ASCII码文件也能被考虑为一个UTF-8文件,而且一个碰巧只使用ASCII码字符的 UTF-8文件和拥有同样字符的ASCII码文件是相同的。

这个特性使得UTF-8的向后兼容性非常好,尤其使用较旧的Unix工具时。UTF-8 无疑地是在 Unix上的占优势的编码。它主要的弱点是对东方文字是非常低效的。

(2)UTF-16编码在微软的 *** 作系统和Java环境下受到偏爱。它对西方语言是比较低效,但对于东方语言是更有效率的。一个UTF-16 的变体有时叫作UCS-2 。

(3)ISO-8859编码系列是256个字符的ASCII码的超集。他们不能够支援所有的Unicode码字符他们只能支援一些特别的语言或语言家族。

ISO-8859-1,也既Latin-1,包括大多数的西欧和非洲语言,但是不含阿拉伯语。ISO-8859-2,也既Latin-2,包括许多东欧的语言,像是匈牙利语和波兰语。

参考资料:

百度百科--Unicode

 python对于Unicode编码可以使用decode进行转换成中文:

>>>str = b'\xe8\xb4\xb9\xe8\x84\x91\xe5\xad\x90'

>>>str.decode('utf-8')

'费脑子'

如果是字符串类型的Unicode编码没办法直接用decode进行转换:

>>> str ="\\xe8\\xb4\\xb9\\xe8\\x84\\x91\\xe5\\xad\\x90"

>>> str.decode('utf-8')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'str' object has no attribute 'decode'

处理方式:

>>> str = eval("b" + "\"" + str + "\"")

>>> str.decode('utf-8')

'费脑子'

Python核心库的open函数是按照ascii设计的。但是,现在我们越来越多地要面对Unicode文件。好在python提供了codecs模块,帮我们解决了这个问题。

codecs模块的open定义如下

open(filename, mode[, encoding[, errors[, buffering]]])

Open an encoded file using the given mode and return a wrapped version providing transparent encoding/decoding.

其中前两个参数filename和mode和默认的open相同。第三个参数encoding是关键,制定了文件的编码方式。

对于常用的Unicode有这几种utf_16、utf_16_le、utf_16_be、utf_8,每一种还有一些可用的别名,具体可以查找python manual。

utf_16、utf_16_le、utf_16_be参数的区别是这样的。

如果指定了utf_16,python会检查文件的BOM(Byte Order Mark)来判断,文件类型到底是utf_16_le、utf_16_be。对于没有BOM的文件会报错。

如果我们直接指定了utf_16_le、utf_16_be,python就不检查BOM了。对于没有BOM的文件很好用。但是,对于有BOM的文件就要注意,它会把BOM当作第一个字符读入。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11514076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存