python中字符串编码问题

个人遇到问题:

某个文件1,里面有字符创"360云盘"

用cat看

用less命令查看时如下:

是用vim查看时如下:

显然在vim是能够正确识别的,也就是说这3个命令查看文件时,编码方式是不一样的。

下面用file命令来查看本文件的编码方式如下:file 文件名

编码方式是:ISO-8859

这个是什么编码方式呢?它是中文编码方式,由于file命令不是取全文,而是截取文章前面部分进行一个判断的。ISO-8859-1 到ISO-8859-16,其实,也就认为是GB2312的汉字编码方式就行了。

这种不能够直接显示需要转为‘utf-8‘编码方式完成。

过程:

line="360云盘"

line=line.decode(‘GB2312‘).encode(‘utf-8‘)

这样就能够完成编码方式的转变了;那为什么不用‘ISO-8859‘,因为python里面说不是识别这种编码方式,改为GB2312就有效果了

另一个问题:

如果并不知道原来编码方式,而又想统一将输入的文件转为utf-8码,这种应用在爬虫中获取根据url获取html中常用;

这就需要用到python里面的一个模块叫chardet;下载地址如下:

http://download.csdn.net/detail/xzy_xuexi1/9085689

解压后通过如下代码即可:

import sys

sys.path.append(‘解压后的路径‘)

import chardet

print chardet.detect(“360云盘”)

-------

打印出来如下:

返回值是个字典型,key只有confidence就是表示可信度,encoding编码方式,使用时直接用chardet.detect(“360云盘”)[‘encoding’]

很方便就取得了字符的编码方式。

对于所有文件想转为utf-8则可用

line="360云盘"

line=line.decode(chardet.detect(line)[‘encoding’]).encode(‘utf-8‘)

这里还是出问题,因为chardet.detect(line)[‘encoding’]返回值是:

编码方式是EUC-TW,不知道是什么鬼,后来好搜一下,说

EUC-TW本来是台湾使用的其中一个汉字储存方法,以CNS11643字表为基础。但是台湾普遍使用大五码,EUC-TW甚少使用。

说白了也是一种汉字编码,这里Python是不支持这种编码的,没办法了,只能通过对EUC-TW,ISO-8859等汉字编码,通过判定后,让“GB2312”替换

也就是

if chardet.detect(line)[‘encoding’]==‘EUC-TW’  or chardet.detect(line)[‘encoding’]==‘ISO-8859.*’

  line=line.decode(“GB2312”).encode(‘utf-8‘)

类似这种处理,这是鄙人简单的处理方式,有更好的方式望大家提供分享。

好了,到此,记录个人的遇到的这个问题,通过上述的方式成功解决了我的问题;

越学越感到自己文盲,努力前行,多多实践,多多解决实际问题。

时间: 2024-08-01 14:18:51

python中字符串编码问题的相关文章

python中字符串编码转换

字符串编码转换程序员最苦逼的地方,什么乱码之类的几乎都是由汉字引起的. 其实编码问题很好搞定,只要记住一点: 任何平台的任何编码,都能和Unicode互相转换. UTF-8与GBK互相转换,那就先把UTF-8转换成Unicode,再从Unicode转换成GBK,反之同理. 注意:在python3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string # 这是一个 UTF-8 编码的字符串 utf8Str = "你好地球&quo

Python中字符串的使用

这篇文章主要介绍python当中用的非常多的一种内置类型——str.它属于python中的Sequnce Type(序列类型).python中一共7种序列类型,分别为str(字符串),unicode(u字符串),list(列表),tuple(元组),bytearray(字节数组),buffer(缓冲内存),xrange(范围).它们的通用操作如下: Operation Result x in s 判断x是否在s中 x not in s 判断x是不在s中 x + t 两个序列合并, 将t加到s之后

Python中字符串的操作

在python中字符串的包围的引号有三种,单引号,双引号,三引号,其中,单引号和双引号完全相同,在python中单引号也可完成转义工作 >>>print('doesn\'t \n it?') doesn't it? 但经常性的,一般使用 单双引号+转义更为普遍 >>>print("doesn't \n it?") doesn't  it? 三引号的使用,三引号(三个单引号或者三个双引号)用来座位注释,文档说明,类描述,用于比较广泛,他可以包含单引号,

python中的编码问题:以ascii和unicode为主线

  1.unicode.gbk.gb2312.utf-8的关系 http://www.pythonclub.org/python-basic/encode-detail 这篇文章写的比较好,utf-8是unicode的一种实现方式,unicode.gbk.gb2312是编码字符集: 2.python中的中文编码问题 2.1 .py文件中的编码 Python 默认脚本文件都是 ANSCII 编码的,当文件 中有非 ANSCII 编码范围内的字符的时候就要使用"编码指示"来修正. 一个mo

一篇文章助你理解Python2中字符串编码问题

前几天给大家介绍了unicode编码和utf-8编码的理论知识,没来得及上车的小伙伴们可以戳这篇文章:浅谈unicode编码和utf-8编码的关系.下面在Python2环境中进行代码演示,分别Windows和Linux操作系统下进行演示,以加深对字符串编码的理解. 1.首先在Windows操作系统下的Python2环境中进行演示,我们都知道Python2中的编码问题经常出现,需要通过编码(encode)和解码(decode)进行实现.通过cmd进入命令行窗口,然后输入两个字符串'abc'和u'a

一篇文章助你理解Python3中字符串编码问题

前几天给大家介绍了unicode编码和utf-8编码的理论知识,以及Python2中字符串编码问题,没来得及上车的小伙伴们可以戳这篇文章:浅谈unicode编码和utf-8编码的关系和一篇文章助你理解Python2中字符串编码问题.下面在Python3环境中进行代码演示,分别Windows和Linux操作系统下进行演示,以加深对字符串编码的理解. 在Python2的Python文件的文件头往往会声明字符的编码格式,通过会使用代码"#-*- coding -*-"作为编码声明,如下图所示

python中字符串操作大全

前段时间,闲的蛋疼,重新整理了一下python的学习资料,现在把整理的python中字符串操作分享出来,方便自己和大家今后查询 a = 'SUNW ukong 123456' #print(a.capitalize())      #字符串首字母变成大写 #print(a.casefold())        #将字符串中的大写字母全部变成小写字母 #print(a.center(50,'-'))    #将字符串居中显示,总共50个字符,如果字符串的长度不够50个字符,就在字符串两边补齐‘-’

python中字符串链接的七种方式

一. str1+str2 string类型 '+'号连接 >>> str1="one" >>> str2="two" >>> str1+str2 'onetwo' >>>注意:该方式性能较差,因为python中字符串是不可变的类型,使用 + 连接两个字符串时会生成一个新的字符串,生成新的字符串就需要重新申请内存,当连续相加的字符串很多时(a+b+c+d+e+f+...) ,效率低下就是必然的了例

Python中字符串查找效率比较

Python中字符串查找方式有多种,常见的有re.match/search or str.find 用一个例子来说明各种方式的效率如下: from timeit import timeit import re def find(string, text): if string.find(text) > -1: pass def re_find(string, text): if re.match(text, string): pass def best_find(string, text): i