导航:首页 > 编程语言 > pythonstr的中文

pythonstr的中文

发布时间:2022-07-04 18:36:32

python 读取的中文怎么使用

在本文中,以'哈'来解释作示例解释所有的问题,“哈”的各种编码如下:
1. UNICODE (UTF8-16),C854;
2. UTF-8,E59388;
3. GBK,B9FE。

一、python中的str和unicode

一直以来,python中的中文编码就是一个极为头大的问题,经常抛出编码转换的异常,python中的str和unicode到底是一个什么东西呢?
在python中提到unicode,一般指的是unicode对象。
例如'哈哈'的unicode对象为

u'/u54c8/u54c8'
而str,是一个字节数组,这个字节数组表示的是对unicode对象编码(可以是utf-8、gbk、cp936、GB2312)后的存储的格式。
这里它仅仅是一个字节流,没有其它的含义,如果你想使这个字节流显示的内容有意义,就必须用正确的编码格式,解码显示。

例如:

在这里 su 是unicode对象,
s_utf8是字节数组,存储的是unicode 经过utf8编码后的字节,'/xe5/x93/x88/xe5/x93/x88'
同样,s_gbk存储的是unicode经过gbk编码后的字节。

在上面print中,为什么print s_utf8为乱码,而print s_gbk就可以显示的是中文?

因为print语句它的实现是将要输出的内容传送了操作系统,操作系统会根据系统的编码对输入的字节流进行编码,这就解释了为什么utf-8格式的字符串“哈哈”,输出的是“鍝埚搱”,因为'/xe5/x93/x88/xe5/x93/x88'用GB2312去解释,其显示的出来就是“鍝埚搱”。

这里再强调一下,str记录的是字节数组,只是某种编码的存储格式,至于输出到文件或是打印出来是什么格式,完全取决于其解码的编码将它解码成什么样子。

这里再对print进行一点补充说明:当将一个unicode对象传给print时,在内部会将该unicode对象进行一次转换,转换成本地的默认编码(这仅是个人猜测)

二、str和unicode对象的转换
str和unicode对象的转换,通过encode和decode实现,具体使用如下:

将GBK'哈哈'转换成unicode,然后再转换成UTF8

三、设定默认编码 Setdefaultencoding

如上图的演示代码所示:

当把s(gbk字符串)直接编码成utf-8的时候,将抛出异常,但是通过调用如下代码:

import sys

reload(sys)

sys.setdefaultencoding('gbk')

后就可以转换成功,为什么呢?
在python中str和unicode在编码和解码过程中,如果将一个str直接编码成另一种编码,会先把str解码成unicode,采用的编码为默认编码,一般默认编码是anscii,所以在上面示例代码中第一次转换的时候会出错,当设定当前默认编码为'gbk'后,就不会出错了。

至于reload(sys)是因为Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入。

四、操作不同文件的编码格式的文件
建立一个文件test.txt,文件格式用ANSI,内容为:
abc中文

用python来读取
# coding=gbk

print open("Test.txt").read()

结果:
abc中文

把文件格式改成UTF-8:

结果:
abc涓菡孧

显然,这里需要解码:
# coding=gbk

import codecs

print open("Test.txt").read().decode("utf-8")

结果:
abc中文

上面的test.txt我是用Editplus来编辑的,但当我用Windows自带的记事本编辑并存成UTF-8格式时,

运行时报错:
Traceback (most recent call last):

File "ChineseTest.py", line 3, in

print open("Test.txt").read().decode("utf-8")

UnicodeEncodeError: 'gbk' codec can't encode character u'/ufeff' in position 0: illegal multibyte sequence

原来,某些软件,如notepad,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。

因此我们在读取时需要自己去掉这些字符,python中的codecs mole定义了这个常量:
# coding=gbk

import codecs

data = open("Test.txt").read()

if data[:3] == codecs.BOM_UTF8:

data = data[3:]

print data.decode("utf-8")

结果:
abc中文

五、文件的编码格式和编码声明的作用

源文件的编码格式对字符串的声明有什么作用呢?
这个问题困扰一直困扰了我好久,现在终于有点眉目了,文件的编码格式决定了在该源文件中声明的字符串的编码格式,例如:
str = '哈哈'

print repr(str)

a.如果文件格式为utf-8,则str的值为:'/xe5/x93/x88/xe5/x93/x88'(哈哈的utf-8编码)
b.如果文件格式为gbk,则str的值为:'/xb9/xfe/xb9/xfe'(哈哈的gbk编码)

在第一节已经说过,python中的字符串,只是一个字节数组,所以当把a情况的str输出到gbk编码的控制台时,就将显示为乱码:鍝埚搱;而当把b情况下的str输出utf-8编码的控制台时,也将显示乱码的问题,是什么也没有,也许'/xb9/xfe/xb9/xfe'用utf-8解码显示,就是空白吧。>_<

说完文件格式,现在来谈谈编码声明的作用吧,每个文件在最上面的地方,都会用# coding=gbk 类似的语句声明一下编码,但是这个声明到底有什么用呢?到止前为止,我觉得它的作用也就是三个:

a、声明源文件中将出现非ascii编码,通常也就是中文;
b、在高级的IDE中,IDE会将你的文件格式保存成你指定编码格式。
c、决定源码中类似于u'哈'这类声明的将‘哈’解码成unicode所用的编码格式,也是一个比较容易让人迷惑的地方,
看示例:
#coding:gbk

ss = u'哈哈'
print repr(ss)
print 'ss:%s' % ss

将这个些代码保存成一个utf-8文本,运行,你认为会输出什么呢?大家第一感觉肯定输出的肯定是:
u'/u54c8/u54c8'
ss:哈哈

但是实际上输出是:
u'/u935d/u581d/u6431'

ss:鍝埚搱

为什么会这样,这时候,就是编码声明在作怪了,在运行ss = u'哈哈'的时候,整个过程可以分为以下几步:

1) 获取'哈哈'的编码:由文件编码格式确定,为'/xe5/x93/x88/xe5/x93/x88'(哈哈的utf-8编码形式)

2) 转成unicode编码的时候,在这个转换的过程中,对于'/xe5/x93/x88/xe5/x93/x88'的解码,不是用utf-8解码,而是用声明编码处指定的编码GBK,将'/xe5/x93/x88/xe5/x93/x88'按GBK解码,得到就是''鍝埚搱'',
这三个字的unicode编码就是u'/u935d/u581d/u6431',至止可以解释为什么print repr(ss)输出的是u'/u935d/u581d/u6431'了。

好了,这里有点绕,我们来分析下一个示例:
#-*- coding:utf-8 -*-

ss = u'哈哈'

print repr(ss)

print 'ss:%s' % ss

将这个示例这次保存成GBK编码形式,运行结果,竟然是:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb9 in position 0: unexpected code byte

这里为什么会有utf8解码错误呢?想想上个示例也明白了,
转换第一步,因为文件编码是GBK,得到的是'哈哈'编码是GBK的编码'/xb9/xfe/xb9/xfe',
当进行第二步,转换成unicode的时候,会用UTF8对'/xb9/xfe/xb9/xfe'进行解码,而大家查utf-8的编码表会发现,utf8编码表(关于UTF-8解释可参见字符编码笔记:ASCII、UTF-8、UNICODE)中根本不存在,所以会报上述错误。

❷ python中文处理问题:str里面有中文有英文字母有标点符号有数字,我只想保留其中的中文,该怎么实现呢

# -*- coding:utf-8 -*-
import re
print ''.join(re.findall(u'[\u4e00-\u9fa5]+', u'#照片jpg)|(JPG)))#中.1851'))

PS: 我这里测试过,放在py文件中可以正确执行,但在shell下得不到结果。参考下吧。

❸ python中“str”是什么意思

你这里str.format(**locats())中locats应该是locals吧?
locals返回当前作用域
的所有局部变量的变量名:变量值组成的字典。
例如:当前作用域有两个局部变量x=1,y='something'则locals()返回字典
{'x':1,'y':'something'}
**locals()在format函数调用里的意思是将locals()返回的字典解包传递给format函数。如果locals返回的如上面的例子里说的
一样的话,解包就是将{'x':1,'y':'something'}变成x=1,y='something'
于是str.format(**locats())等价于str.format(x=1,y='something')
format是字符串对象的方法,format的使用可参考python手册。
还有什么不懂可以再追问。谢谢。

❹ str在python中是什么意思

Python中的str可以表示字符串类,也可以是将变量强制转换为字符串的函数,写作str()。str函数是Python内置函数的一种,可以直接使用,无需调用。

Python由荷兰数学和计算机科学研究学会的Guido van Rossum于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程

Python语法和动态类型:

以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。

Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。

❺ python中str啥意思呢谢谢

❻ python中str函数是什么意思

Python中的str可以表示字符串类,也可以是将变量强制转换为字符串的函数,写作str()。str函数是Python内置函数的一种,可以直接使用,无需调用。

Python由荷兰数学和计算机科学研究学会的Guido van Rossum于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。

Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。

Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。

❼ python中str什么意思

str 表示字符串类
也可以是将变量强制转换为字符串的函数

❽ Python中str()什么意思中文

将其他类型转化为字符串类型
望采纳

❾ python str是什么意思

字符串的意思。它是一个Python的内置函数。把其他的类型实例转为字符串实例。

❿ python str是什么编码

str 和 unicode
str和unicode都是basestring的子类
所以有判断是否是字符串的方法
def is_str(s): return isinstance(s, basestring)

str和unicode 转换
decode 文档
encode 文档
str -> decode(‘the_coding_of_str‘) -> unicode unicode -> encode(‘the_coding_you_want‘) -> str

区别
str是字节串,由unicode经过编码(encode)后的字节组成的
声明方式
s = ‘中文‘ s = u‘中文‘.encode(‘utf-8‘) >>> type(‘中文‘) <type ‘str‘>

求长度(返回字节数)
>>> u‘中文‘.encode(‘utf-8‘) ‘\xe4\xb8\xad\xe6\x96\x87‘ >>> len(u‘中文‘.encode(‘utf-8‘)) 6

unicode才是真正意义上的字符串,由字符组成
声明方式
s = u‘中文‘ s = ‘中文‘.decode(‘utf-8‘) s = unicode(‘中文‘, ‘utf-8‘) >>> type(u‘中文‘) <type ‘unicode‘>

求长度(返回字符数),在逻辑中真正想要用的
>>> u‘中文‘ u‘\u4e2d\u6587‘ >>> len(u‘中文‘) 2

阅读全文

与pythonstr的中文相关的资料

热点内容
圆命令画法 浏览:303
如果给电脑e盘文件加密 浏览:799
javaswing项目 浏览:774
androidsdksetup 浏览:1001
pdf怎么设置中文 浏览:124
安卓手机用什么软件看伦敦金 浏览:962
魅族文件夹无名称 浏览:787
苏黎世无人机算法 浏览:872
核桃编程和小码王的融资 浏览:681
微积分教材pdf 浏览:723
写python给微信好友发消息 浏览:336
蚊帐自营米加密 浏览:418
学校推荐核桃编程 浏览:802
湖南农信app怎么导明细 浏览:471
福特abs编程 浏览:506
如何自学安卓手机 浏览:437
以太坊源码共识机制 浏览:910
单片机探测器 浏览:870
demo编程大赛作品怎么运行 浏览:51
学历提升用什么手机软件App 浏览:938