1. 编码和解码的概念:
    编码是将源对象内容按照一种标准转换为一种标准格式内容。
    解码是和编码对应的,它使用和编码相同的标准将编码内容还原为最初的对象内容。

2. python中的编码和解码:

  (1)decode的作用是将其他编码的字符串转换成unicode编码。

  (2)encode的作用是将unicode编码转换成其他编码的字符串。如果待编码的字符串不是Unicode,python会进行以下两步:

      a) 将字符串转换为解码为Unicode(采用python默认的编码:ASCII)

      b) 将Unicode编码为指定的编码

 3. 文件的编码格式的作用?
     文件的编码格式决定了源文件字符串的编码格式

  当文件中的字符串没有指定编码方式时,则采用“文件的编码格式”

    当文件中的字符串指定了编码方式,则使用指定的编码方式。例如:u"哈"的编码方式为Unicode不管是在GBK文件中,还是UTF-8文件中

4. python文件中,编码声明的作用?

a. 声明源文件中将出现非ascii编码,通常也就是中文;

b. 在高级的IDE中,IDE会将你的文件格式保存成你指定编码格式

c. 决定源码中类似于u'哈'(unicode)这类声明的将‘哈’解码成unicode所用的编码格式,也是一个比较容易让人迷惑的地方

5. python默认的编码格式

  python默认的编码方式为ASCII

6. 操作系统默认的编码格式

  win7 32位系统,默认的编码方式是GBK

7. 经常出现的问题:

  (1).  【代码和运行结果】:

      文件的编码格式:UTF-8(无BOM编码)

    【编码解读】:

      1). 文件的编辑格式:决定了文件中所有字符的编码----UTF-8(无BOM编码)

       故“试图打印中文”会用UTF-8进行编码\xE8\xAF\x95\xE5\x9B\xBE\xE6\x89\x93\xE5\x8D\xB0\xE4\xB8\xAD\xE6\x96\x87

      2). python默认采用的编码方式为ASCII

        python会用ASCII码对“试图打印中文”进行解码。两种编码方式不一样,故会报错

    【修改方法】:

      1). 在python文件中,加入编码声明: --------此时声明只能声明文件中会出现非ASCII编码,即中文编码

        #-*- coding:utf-8 -*-

  (2).  【代码和运行结果】:

文件的编码格式:UTF-8(无BOM编码)

      

    【编码解读】:

             1). 文件的编辑格式:决定了文件中所有字符的编码----UTF-8(无BOM编码)

       故“哈哈”会用UTF-8进行编码\xE5\x93\x88\xE5\x93\x88  

      2). print语句它的实现是将要输出的内容传送了操作系统,操作系统会根据系统的编码对输入的字节流进行编码-----win7 32位操作系统的编码为GBK

        故“\xE5\x93\x88\xE5\x93\x88”用GBK解码成了“鍝堝搱”

    【修改方法】:

      1). 将文件的编码格式修改为GBK(或者GB2312)

  (3).  【代码和运行结果】:

文件的编码格式:UTF-8(无BOM编码)

     

    【编码解读】:

             1). 文件的编辑格式:决定了文件中所有字符的编码----UTF-8(无BOM编码)

       故“哈哈”会用UTF-8进行编码\xE5\x93\x88\xE5\x93\x88

      2). encode直接编码的方法会进行如下两步操作:

        将Str解码成Unicode(采用python系统默认的编码方式ASCII)------故此步会报错

        将Unicode编码成GBK

    【修改方法】:

      1). 将python系统的默认编码方式修改为UTF-8

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

      2). 先对str进行解码,解码成Unicode编码格式,后将Unicode编码格式编码成GBK

       str = str.decode("utf-8")
          str = str.encode("gbk")

  (4).  【代码和运行结果】:

文件的编码格式:UTF-8(无BOM编码)

      

    【编码解读】:

             1). 文件的编辑格式:决定了文件中所有字符的编码----UTF-8(无BOM编码)

       故“哈哈”会用UTF-8进行编码\xE5\x93\x88\xE5\x93\x88

      2). str = u"哈哈",转换成Unicode时,不是用文件的编码格式(UTF-8)进行的解码,而是用文件编码声明进行解码(GBK),这样导致出现错误  

    【修改方法】:

      1. 将文件编码声明为:

        #-*- coding:utf-8 -*-

8. 主要参考:

      (1)http://blog.csdn.net/kiki113/article/details/4062063

      (2)UTF-8、GBK、Unicoded编码对照表

      

python_中文乱码问题的更多相关文章

  1. java中文乱码解决之道(一)-----认识字符集

    沉寂了许久(大概有三个多月了吧),LZ"按捺不住"开始写博了! java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.c ...

  2. MAC下 mysql不能插入中文和中文乱码的问题总结

    MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...

  3. java中文乱码解决之道(九)-----总结

    乱码,我们前台展示的杀手,可能有些朋友和我的经历一样:遇到乱码先按照自己的经验来解决,如果没有解决就google,运气好一搜就可以解决,运气不好可能够你折腾一番了.LZ之所以写这个系列博客就是因为遇到 ...

  4. 解决springmvc+mybatis+mysql中文乱码问题【转】

    这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文 ...

  5. freemarker页面中文乱码

    一.前言 简单的记录freemarker遇到的错误问题:ftl页面中文乱码 由于freemarker整合在ssm框架中,所以笔者直接贴配置代码 <beans xmlns="http:/ ...

  6. tomcat项目中文乱码问题解决方法

    在部署tomcat项目时经常会遇到中文乱码问题,解决的方法可参考以下步骤. 1.更改Tomcat安装目录下的conf\server.xml,指定浏览器的编码格式为"utf-8"格式 ...

  7. IE下get传中文乱码的问题 -- 解决方案 (js)

    W3school 函数 JavaScript 全局对象 定义和用法 encodeURI() 函数可把字符串作为 URI 进行编码. 语法 encodeURI(URIstring) 参数 描述 URIs ...

  8. JSP和Servlet的中文乱码处理

    JSP和Servlet的中文乱码处理 前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下.应该是可以解决日常的乱码问题了.现在作以下总结希望对需要的人有所帮助.我 ...

  9. Git bash下中文乱码问题

    Git bash下中文乱码--解决方案 解决办法1: 在git bash下,右键 出现下图,选择options: 选择"Text" 将Character set设置为 UTF-8 ...

随机推荐

  1. git命令常见问题总结

    1.git如何放弃所有本地修改 git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面.可用git stash ...

  2. Memcached 笔记与总结(3)安装 php-memcache(windows 系统下)

    在 windows 下安装 php-memcache,需要下载编译好的 memcached.dll. 要找到可用的 dll 文件,需要根据 php.ini 中的 3 个参数来选择 dll 文件: ① ...

  3. Linux 计划任务 Crontab 笔记与总结(1)

    Linux 版本:CentOS 6.6 应用场景,例如: ① 每分钟执行一个程序检查系统运行状态 ② 每天凌晨需要对过去一天的业务数据进行统计 ③ 每个星期需要把日志文件备份 ④ 每个月把数据库进行备 ...

  4. Hibernate + proxool 连接数超过最大允许连接数

    主要原因是操作完成没有释放连接,在Hibernate中增加设定 <prop key="hibernate.connection.release_mode">after_ ...

  5. ecshop中$user对象

    ecshop中$user对象 2011-10-01 18:41:23|  分类: ECSHOP |  标签:ecshop  $user  对象  |举报|字号 订阅 http://blog.163.c ...

  6. Introducing the Accelerated Mobile Pages Project, for a faster, open mobile web

    https://googleblog.blogspot.com/2015/10/introducing-accelerated-mobile-pages.html October 7, 2015 Sm ...

  7. a bitwise operation 广告投放监控

    将随着时间不断增大的数字N个依次编号为1到N的N个球,颜色每次随机为红黑蓝,时间上先后逐个放入篮子中,计算离现在最近的24个球的红.黑.蓝颜色数 广告投放监控 a bitwise operation ...

  8. OpenGL 完全教程(写给Delphi的开发者) 前言

    前言 在开发了许多2D图形程序之后,许多人开始对3D图形编程产生了兴趣.学习一套3D API,是进行3D图形编程的基础.在有趣的3D图形编程中,3D API只不过充当着一种低级的工具而已.因此,在这里 ...

  9. web项目中 集合Spring&使用junit4测试Spring

    web项目中 集合Spring 问题: 如果将 ApplicationContext applicationContext = new ClassPathXmlApplicationContext(& ...

  10. Java反射机制深入研究

    ava 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”.   在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? ...