1. python 怎么把字符转换为unicode编码
实现代码如下:
a
=
'abce'#
print
type(a)b
=
a.decode("ascii")#
print
type(b)c
=
a.decode("ascii").encode("utf-8")#
print
type(c)
在python中进行编码转换都是通过unicode作为中间值实现的。所以要先decode成unicode字符,然后再使用encode转换成utf-8编码的str。可以把注释取消了,看下转换过程中的类型。
2. python怎么转换unicode编码
用decode()就行。decode()方法必须传入一个参数,这个参数就是当前待转码的编码,此函数方法的用意就是将当前编码为Unicode编码。
比如就你这提问的此页面:
#使用版本是python2.
importurllib
url='https://..com/question/1499967322379602619.html?entry=qb_ihome_tag&hideOtherAnswer=true&newAnswer=1'
html=urllib.urlopen(url).read()
result=html.decode('gbk')
printresult
方法是绝对可行的
此法对字符串和文档内容的解码一样有效。
3. python unicode编码
python unicode编码:
下面的代码创建了一个Unicode字符串,用UTF-8编码器将它编码,然后写入到一个文件中去,接着把数据从文件中读回来,解码成Unicode字符串对象,最后,打印出Unicode字符串,用以确认程序正确地运行。
在linux中编写,在VIM中输入如下代码,保存为uniFile.py
#/home/xiaopeng/python/code/uniFile.py
'''
:Writes
aUnicodestringtoafileinutf-8andreadsitbackin
'''
CODEC='utf-8'编码方式
FILE='unicode.txt'要存的文件名
hello_out=u"Helloworld "创建了一个Unicode格式的字符串
bytes_out=hello_out.encode(CODEC)用UTF-8编码
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)解码
printhello_in打印
在终端中输入:python uniFile.py
结果打印出 Hello world
然后在python目录下会发现多了一个名为unicode.txt的文件,用cat命令查看一下,发现里面的内容和打印的结果一样.
把Unicode应用到实际中注意一下四点:
1程序中出现字符串时一定要加一个前缀u
2不要用str()函数,用Unicode()代替
3 不要用过时的string模块。如果传给它非ASCII码,它会把一切搞砸。
4 不到必须时不要在你的程序里编解码Unicode字符,只在你要写入文件或者数据库或者网络时,才调用encode()函数和decode()函数。
4. python中string和Unicode的区别
首先要弄清楚的是,在python里,string object和unicode object是两种不同的类型。
string object是由characters组成的sequence,而unicode object是Unicode code units组成的sequence。
string里的character是有多种编码方式的,比如单字节的ASCII,双字节的GB2312等等,再比如UTF-8。很明显要想解读string,必需知道string里的character是用哪种编码方式,然后才能进行。
Unicode code unit又是什么东西呢?一个Unicode code unit是一个16-bit或者32-bit的数值,每个数值代表一个unicode符号。在python里,16-bit的unicode,对应的是ucs2编码。32-bit对应的是ucs4编码。是不是感觉string里character的编码没什么区别?反正我现在脑子里就是这样一个印象:在Python里,ucs2或者ucs4编码的,我们叫做unicode object,其他编码的我们就叫做string。
至于python里的unicode到底是ucs2还是ucs4的,可以在编译时指定。例如Linux下,要用ucs2做unicode的编码,可以这样
# ./configure --enable-unicode=ucs2
# make
# make install
下载的Windows预编译版本,一般都是ucs2的。要想知道某个python运行环境是ucs2还是ucs4,可以查看sys.maxunicde,65535就是ucs2的,另一个很大的数值就是ucs4。
下面我们看看string和unicode在python里的不同
我们先看看在简体中文Windows 2003系统下,系统编码是GBK
>>> a = '你好'
>>> a
'/xc4/xe3/xba/xc3'
>>> b = u'你好'
>>> b
u'/u4f60/u597d'
>>> print a
你好
>>> print b
你好
>>> a.__class__
<type 'str'>
>>> b.__class__
<type 'unicode'>
>>> len(a)
4
>>> len(b)
2
在一个系统编码为UTF-8的Linux环境下
>>> a = '你好'
>>> a
'/xe4/xbd/xa0/xe5/xa5/xbd'
>>> b = u'你好'
>>> b
u'/u4f60/u597d'
>>> print a
你好
>>> print b
你好
>>> a.__class__
<type 'str'>
>>> b.__class__
<type 'unicode'>
>>> len(a)
6
>>> len(b)
2
如何?简单总结一下:
1、string直接用引号来表示,unicode在引号前加一个u
2、直接输入的string常量会用系统缺省编码方式来编码,例如在GBK环境下,'你好'会编码成'/xc4/xe3/xba/xc3',而在UTF-8环境下就成了'/xe4/xbd/xa0/xe5/xa5/xbd'。
3、len(string)返回string的字节数,len(unicode)返回的是字符数
4、很重要的一点,print unicode不会乱码。现在我们常用的Linux、Windows系统,都是支持unicode的,版本太老的不算。比如Windows 2003支持ucs2,所以在中文Windows2003下,除了可以正常显示缺省的GBK编码外,还可以正常显示ucs2编码。举个例子,还是在中文Windows 2003的GBK环境下:
>>>a = '/xe4/xbd/xa0/xe5/xa5/xbd' # UTF-8的'你好'
>>> print a
浣犲ソ
>>> b = unicode(a, "UTF-8")
>>> b
u'/u4f60/u597d'
>>> print b
你好
应该明白了吧?
下面再说说string和unicode的相互转换,什么unicode()、decode()、encode()、codecs之类的。
5. python unicode麻烦帮我按句解释下,unicode()函数作用到底是什么
UNICODE函数wei 预先编写的公式,可以对一个或多个值执行运算,并返回一个或多个值。函数可以简化和缩短工作表中的公式,尤其在用公式执行很长或复杂的计算时的公式语法和用法。如果文本包含部分代理项或数据类型无效,则UNICODE返回错误值#VALUE!。
Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。
因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,普通的字符串ABC在Python内部都是ASCII编码的。
(5)python中的unicode值扩展阅读
Unicode为了解决传统的字符编码方案的局限而产生的,例如ISO 8859所定义的字符虽然在不同的国家中广泛地使用,可是在不同国家间却经常出现不兼容的情况。
很多传统的编码方式都有一个共同的问题,即容许电脑处理双语环境(通常使用拉丁字母以及其本地语言),但却无法同时支持多语言环境(指可同时处理多种语言混合的情况)。
Unicode编码包含了不同写法的字,如“ɑ/a”、“户/户/戸”。然而在汉字方面引起了一字多形的认定争议。
6. python123汉字的unicode编码值
python的默认编码是ascii,可以通过sys.setdefaultencoding('utf-8')函数设置python的默认编码。
python中可以通过encode和decode的方式改变数据的编码,比如:
>>> u'汉字'
u'\u6c49\u5b57'
>>> u'汉字'.encode('utf-8')
'\xe6\xb1\x89\xe5\xad\x97'
>>> u'汉字'.encode('utf-8').decode('utf-8')
u'\u6c49\u5b57'
我们可以通过这两个函数设置编码。
那么,python中的str是什么类型?
>>> import binascii
>>> '汉字'
'\xba\xba\xd7\xd6'
>>> type('汉字')
>>> print binascii.b2a_hex('汉字')
babad7d6
>>> print binascii.b2a_hex(u'汉字')
Traceback (most recent call last):
File "", line 1, in
UnicodeEncodeError: 'ascii' codec can't encode characters in
position 0-1: ordinal not in range(128)
>>> print binascii.b2a_hex(u'汉字'.encode('utf-8'))
e6b189e5ad97
>>> print binascii.b2a_hex(u'汉字'.encode('gbk'))
babad7d6
binascii是将数据的二进制转换成ascii,上面的解释是:‘汉字'的类型是str,二进制是babad7d6,u‘汉字'是无法转换成ascii,这样就报出了开头的第一个错误。解决办法就是把它.encode(‘utf-8')成str类型。因为我命令行是windows默认的GBK编码,所有u'汉字'.encode(‘gbk')的时候,输出结果和‘汉字'结果一样。
7. 了解python中bytes,str和unicode的区别
首先来说把Unicode转换为为原始8位值(二进制数据),有很多种办
编写Python程序的时候,核心部分应该用Unicode来写,也就是python3中的str,python2中的unicode
python3中2种表示字符序列的类型:bytes和str
前者的实例包含了原始8位值,后者的实例包含了Unicode字符
python3中接受bytes和str,并总是返回str:
def to_str(bytes_or_str):
if isinstance(bytes_or_str, bytes):
return bytes_or_str.decode('utf-8')
return bytes_or_str1234
python3中接受bytes和str,并总是返回bytes:
def to_bytes(bytes_or_str):
if isinstance(bytes_or_str, str):
return bytes_or_str.encode('utf-8')
return bytes_or_str1234
python2中2种表示字符序列的类型:unicode和str
与python3刚好相反:后者的实例包含了原始8位值,前者的实例包含了Unicode字符
python2中接受unicode和str,并总是返回unicode:
def to_str(bytes_or_str):
if isinstance(bytes_or_str, str):
return bytes_or_str.decode('utf-8')
return bytes_or_str1234
python2中接受unicode和str,并总是返回str:
def to_bytes(bytes_or_str):
if isinstance(bytes_or_str, unicode):
return bytes_or_str.encode('utf-8')
return bytes_or_str1234
python2和python3需要注意的事情
1.python2中如果str只包含7位的ASCII字符,那么unicode和str 就是同一种类型,可以+操作
2.python3内置的open函数获取文件句柄,默认采用utf-8的格式操作文件,python2则默认是二进制
python2 的写法:
with open("/temp/file.bin",'w')as f :
f.write(os.urandom(10))12
python3 的写法:
with open("/temp/file.bin",'wb')as f :
f.write(os.urandom(10))12
ps:如何让你的代码pythonic
8. Python2.7 中文字符编码,使用Unicode时,选择什么编码格式
关于编码和乱码的问题,我简单讲一下。
通常问这类问题的人是混淆了若干个不同的概念,并且他们自己也没有意识到自己混淆了这些概念的。
终端显示字符的编码(windows下终端是cmd,linux下是各种terminal,远程登录是putty或者xshell)
shell环境的编码。比如中文版windows用的是gbk(向下兼容gb2312),大多数linux发行版使用的是utf-8(LANG=zh_CN.UTF-8)。
文本文件的编码。这个通常取决于你的编辑器,而且有的编辑器支持多种编码的话,你可以在文本开头位置指定编辑器使用特定编码。比如# -*- coding: utf8 -*-,vim看到这行会默认将这个脚本认定为utf-8兼容编码格式。
应用程序的内部编码。一个字符串,作为数据只是一个字节数组,但是作为字符的数组,就有一个解析方式。java和python的内部字符编码是utf-16,python和java都支持用不同的编码来对字节数组进行decode来得到字符数组。
拿题主的问题来解释一下。
我在ubuntu kylin中文环境下默认terminal中做了同样的实验,但是结果和题主恰好相反:
题主现在弄了一个文件,在开始加上了
# -*- coding: utf8 -*-
这下编辑器看到了,知道这文件是utf-8的了。所以编辑器对读入的一坨坨字节用utf-8来解码,对于输出到磁盘的汉字也用utf-8来编码。所以你在文件里面看到的看上去像“汉字”的东西,就和第一种情况下想同了,当然代码就跑得通。
顺便说一下,如果编辑器无视行首这行编码声明,或者编辑器无法支持utf-8格式,那么你弄好的文件在那个编辑器下就会显示乱码,多么简单的道理啊。
终端和环境的编码一致(本机通常是一致的,不一致常常出现在远程登录);如果不一致就需要有编辑器或者文本阅读器做一个兼容两者的转换。
编辑器能够认识文本编码
系统拥有能显示这种字符的字体。
这也就是我为什么一直反对在程序文本中使用除ascii之外的所有编码字符的原因。环境太复杂了,绕开问题远比解决问题轻松。
9. Python读入一个整数n和一个Unicode码值u
输出到屏幕时宽度为11个字符
键盘输入一个9800到9811之间的正整数n,作为Unicode编码,把n-1、n和n+1三个Unicode编码对应字符按照格式要求输出到屏幕:宽度为11个字符。
10. python中u'string'和unicode('string')有什么区别
首先要弄清楚的是,在python里,string object和unicode object是两种不同的类型。
string object是由characters组成的sequence,而unicode object是Unicode code units组成的sequence。
string里的character是有多种编码方式的,比如单字节的ASCII,双字节的GB2312等等,再比如UTF-8。很明显要想解读string,必需知道string里的character是用哪种编码方式,然后才能进行。
Unicode code unit又是什么东西呢?一个Unicode code unit是一个16-bit或者32-bit的数值,每个数值代表一个unicode符号。在python里,16-bit的unicode,对应的是ucs2编码。32-bit对应的是ucs4编码。是不是感觉string里character的编码没什么区别?反正我现在脑子里就是这样一个印象:在Python里,ucs2或者ucs4编码的,我们叫做unicode object,其他编码的我们就叫做string。
至于python里的unicode到底是ucs2还是ucs4的,可以在编译时指定。例如Linux下,要用ucs2做unicode的编码,可以这样
# ./configure --enable-unicode=ucs2
# make
# make install
下载的Windows预编译版本,一般都是ucs2的。要想知道某个python运行环境是ucs2还是ucs4,可以查看sys.maxunicde,65535就是ucs2的,另一个很大的数值就是ucs4。
下面我们看看string和unicode在python里的不同
我们先看看在简体中文Windows 2003系统下,系统编码是GBK
>>> a = '你好'
>>> a
'/xc4/xe3/xba/xc3'
>>> b = u'你好'
>>> b
u'/u4f60/u597d'
>>> print a
你好
>>> print b
你好
>>> a.__class__
>>> b.__class__
>>> len(a)
4
>>> len(b)
2
在一个系统编码为UTF-8的Linux环境下
>>> a = '你好'
>>> a
'/xe4/xbd/xa0/xe5/xa5/xbd'
>>> b = u'你好'
>>> b
u'/u4f60/u597d'
>>> print a
你好
>>> print b
你好
>>> a.__class__
>>> b.__class__
>>> len(a)
6
>>> len(b)
2
如何?简单总结一下:
1、string直接用引号来表示,unicode在引号前加一个u
2、直接输入的string常量会用系统缺省编码方式来编码,例如在GBK环境下,'你好'会编码成'/xc4/xe3/xba/xc3',而在UTF-8环境下就成了'/xe4/xbd/xa0/xe5/xa5/xbd'。
3、len(string)返回string的字节数,len(unicode)返回的是字符数
4、很重要的一点,print unicode不会乱码。现在我们常用的Linux、Windows系统,都是支持unicode的,版本太老的不算。比如Windows 2003支持ucs2,所以在中文Windows2003下,除了可以正常显示缺省的GBK编码外,还可以正常显示ucs2编码。举个例子,还是在中文Windows 2003的GBK环境下:
>>>a = '/xe4/xbd/xa0/xe5/xa5/xbd' # UTF-8的'你好'
>>> print a
浣犲ソ
>>> b = unicode(a, "UTF-8")
>>> b
u'/u4f60/u597d'
>>> print b
你好
应该明白了吧?
下面再说说string和unicode的相互转换,什么unicode()、decode()、encode()、codecs之类的。