原因

近期,用Python处理一些中文的字符串,但是用Python读取文件的中文字符和在代码中输入的中文字符,在判断处理时,例如判断“相等”或者“包含”,总是不能判断,相等或者包含都不起作用。看了字符的编码,源文件输入的中文字符,是2个字节表示,读入的文件,是3个字节表示。在网上找了很多资料,大多和我的问题不想关,这里就根据自己的领悟和网上不错的资源跟大家分享一下。

问题分析

不要把Python和Java混淆,Python是脚本语言,不会编译生成可执行文件,而Java会编译代码,形成可执行的class文件,在编码上,Java会在形成class的时候,采用Unicode直接编码类似中文的字符串,而Python,你即使在文件的第一行声明了编码,有时我也感觉不起作用,只是不会在保存时,重复提醒你在代码中使用的特殊字符。

网上有很多decode,encode,看的我一阵头大,以前不知为何物,这里解释一下:字符串在Python内部的表示,都是以Unicode形式,所以在做编码转换时,都是以Unicode作为中间形式;而将其他编码转化为Unicode的过程,成为decode,将Unicode转化成其他编码的过程,成为encode。在源代码中,你输入的,是你编辑器默认的编码,可能是utf-8,,也可能是gbk或者其他编码,所以写代码,你要明白 你的编辑器环境的编码方式。在这里我就是我刚装不久Python,用的是默认的IDE,里面没有设置编码,导致源码中采用了Windows默认的编码“gbk”(2个字节),而我读入的文件则是utf-8表示(三个字节)。而在Python中,它不会自动将这些字符串转成Unicode形式,采用的是什么编码,就是什么编码。所以在比较或者包含时,编辑器里的中文是两个字节,读入的文件,是三个字节,编码格式就不一样,更不要谈比较或者包含了。

解决方法

知道了问题出在哪,那就好解决了。

方法一: 我直接将编辑器环境在设置里面,设置成utf-8,解决问题了。

方法二:对于编辑器里写的中文编码和读取的文件的编码,都decode成Unicode形式。

方法三:通过Unicode形式,转化成一种编码格式,utf-8或者gbk(个人建议utf-8,代码中属于比较默认一类的).

s1 = unicode('你好','gbk')  #这里是window是环境,输入的要通过gbk进行Unicode
s2 = unicode(input, 'utf-8') #读入的文件为utf-8,要使用utf-8 #或者用方法二中直接采用 decode,大家可以自己找找,自主学习和实践,是每个IT人必须的

附加

注意一下:window中文默认的是gbk,而Linux默认的一般都是utf-8,这个在编码或者处理字符处理,或者文本处理时,要注意,出了问题可能不是代码的问题。

如果想着更多了解Unicode,utf-8或者其他编码,推荐看看一个博主的博客,《字符编码的发展历程》,博文地址:http://blog.csdn.net/sfdev/article/details/3770706。

我一般写博客都是自己用来记住犯过的错,写的不多,也不会写太多,见谅。文字太多,图片较少,这是大部分IT人最不愿看到的,但是要做个“耐心”的IT人,以此警醒。

python 字符编码问题的更多相关文章

  1. python 字符编码练习

    通过下面的练习,加深对python字符编码的认识 # \x00 - \xff 256个字符 >>> a = range(256)>>> b = bytes(a) # ...

  2. Python字符编码讲解

    声明:本文参考 Python字符编码详解 在计算机中我们不管用什么语言和程序,最终数据在计算机中的都是字节码(也就是01形式)的形式存在的,如果 计算机直接把字节码显示在屏幕上,很明显一般人看不懂字节 ...

  3. 深入理解Python字符编码--转

    http://blog.51cto.com/9478652/2057896 不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError ...

  4. 深入理解Python字符编码

    不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError.UnicodeDecodeError 错误,每当遇到错误我们就拿着 enc ...

  5. Python字符编码详解,str,bytes

    什么是明文 “明文”是可以是文本,音乐,可以编码成mp3文件.明文可以是图像的,可以编码为gif.png或jpg文件.明文是电影的,可以编码成wmv文件.不一而足. 什么是编码?把明文变成计算机语言 ...

  6. Python字符编码补充

    字符编码: Python字符编码贯穿Python学习的始终,现在应用的是Python2中字符编码的问题是很多的. 这次是要彻底解决Python字符编码的问题!!! 1 字符编码的发展过程: 1 .AS ...

  7. python --- 字符编码学习小结(二)

    距离上一篇的python --- 字符编码学习小结(一)已经过去2年了,2年的时间里,确实也遇到了各种各样的字符编码问题,也能解决,但是每次都是把所有的方法都试一遍,然后终于正常.这种方法显然是不科学 ...

  8. 转1:Python字符编码详解

    Python27字符编码详解 声明 一 字符编码基础 1 抽象字符清单ACR 2 已编码字符集CCS 3 字符编码格式CEF 31 ASCII初创 311 ASCII 312 EASCII 32 MB ...

  9. 转2:Python字符编码详解

    1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...

  10. python字符编码(二)

    一.什么是字符编码 计算机要想工作必须通电,也就是说‘电’驱使计算机干活,而‘电’的特性,就是高低电压(高低压即二进制数1,低电压即二进制数0),也就是说计算机只认识数字 编程的目的是让计算机干活,而 ...

随机推荐

  1. Oracle数据库11g基于rehl6.5的配置与安装

    REDHAT6.5安装oracle11.2.4 ORACLE11G R2官档网址: http://docs.oracle.com/cd/E11882_01/install.112/e24326/toc ...

  2. Nginx下实现pathinfo及ThinkPHP的URL Rewrite模式支持

    打开Nginx的配置文件 /usr/local/nginx/conf/nginx.conf 一般是在这个路径,根据你的安装路径可能有所变化.如果你配置了vhost,而且只需要你这一个vhost支持pa ...

  3. 揭秘Sql2014新特性-tempdb性能提升

    一直以来,在高负载,复杂的生产环境中,tempdb的压力是成为整个实例瓶颈的重要因素之一.微软的工程师们也在各个版本中不断优化它的使用.到了Sql Server2014又有了新的特性使其性能得temp ...

  4. 微信JSSDK多图片上传并且解决IOS系统上传一直加载的问题

    微信多图片上传必须挨个上传,也就是不能并行,得串行: 那么我们可以定义一个如下所示的上传函数: var serverIds = []; function uploadImages(localImage ...

  5. 零配置Socket TCP消息通讯服务容器EC

    EC全称是elastic communication,是基于c#实现的Socket网络通讯服务容器,支持windows .Net和mono.通过EC容器可以让开发人员在不了解Socket网络通讯知识和 ...

  6. We have detected that MySQL products under the Commercial license are installed. In order to proceed with this GPL installation these Commercial

    下载了MySQL 5.6.15,在安装时,出现了下面的提示信息: 按提示信息的要求单击“是”,结果安装就无法进行下去. 从提示信息上看,意思是指电脑中原来安装有商业版的许可,现在要转换成为GPL许可. ...

  7. 使用NHibernate(7)-- 一对一 && 一对多 && 多对多

    1, 一对一. 对于数据量比较大的时候,考虑查询的性能,肯能会把一个对象的属性分到两个表中存放:比如用户和用户资料,经常使用的一般是Id和用户名,用户资料(学校,籍贯等)是不经常被查询的,所以就会分成 ...

  8. Eclipse的常用快捷键、旁门左道、系统错误小贴士

    转自:http://usenrong.iteye.com/blog/1113700 eclipse是一个开源产品,目前比较流行和普遍的JAVA IDE(集成开发环境)它使用工程化方式管理.虽然ecli ...

  9. hibernate懒加载(转载)

    http://blog.csdn.net/sanjy523892105/article/details/7071139 懒加载详解 懒加载为Hibernate中比较常用的特性之一,下面我们详细来了解下 ...

  10. SQL order by的用法

    首先,order by是用来写在where之后,给多个字段来排序的一个DQL查询语句. 其次,order by写法: 1.  select 字段列表/* from 表名 where 条件 order ...