我们要知道python内部使用的是unicode编码,而外部却要面对千奇百怪的各种编码,比如作为中国程序经常要面对的gbk,gb2312,utf8等,那这些编码是怎么转换成内部的unicode呢?

首先我们先看一下源代码文件中使用字符串的情况。源代码文件作为文本文件就必然是以某种编码形式存储代码的,python默认会认为源代码文件是asci编码,比如说代码中有一个变量赋值:

s1=’a’

print s1

python认为这个’a'就是一个asci编码的字符。在仅仅使用英文字符的情况下一切正常,但是如果用了中文,比如:

s1=’哈’

print s1

这个代码文件被执行时就会出错,就是编码出了问题。python默认将代码文件内容当作asci编码处理,但asci编码中不存在中文,因此抛出异常。

解决问题之道就是要让python知道文件中使用的是什么编码形式,对于中文,可以用的常见编码有utf-8,gbk和gb2312等。只需在代码文件的最前端添加如下:

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

这就是告知python我这个文件里的文本是用utf-8编码的,这样,python就会依照utf-8的编码形式解读其中的字符,然后转换成unicode编码内部处理使用。

不过,如果你在Windows控制台下运行此代码的话,虽然程序是执行了,但屏幕上打印出的却不是哈字。这是由于python编码与控制台编码的不一致造成的。Windows下控制台中的编码使用的

是gbk,而在代码中使用的utf-8,python按照utf-8编码打印到gbk编码的控制台下自然就会不一致而不能打印出正确的汉字。

解决办法一个是将源代码的编码也改成gbk,也就是代码第一行改成:

# -*- coding: gbk -*-

另一种方法是保持源码文件的utf-8不变,而是在’哈’前面加个u字,也就是:

s1=u’哈’

print s1

这样就可以正确打印出’哈’字了。

这里的这个u表示将后面跟的字符串以unicode格式存储。python会根据代码第一行标称的utf-8编码识别代码中的汉字’哈’,然后转换成unicode对象。如果我们用type查看一下’哈’的数据类

型type(‘哈’),会得到,而type(u’哈’),则会得到,也就是在字符前面加u就表明这是一个unicode对象,这个字会以unicode格式存在于内存中,而如果不加u

,表明这仅仅是一个使用某种编码的字符串,编码格式取决于python对源码文件编码的识别,这里就是utf-8。

Python在向控制台输出unicode对象的时候会自动根据输出环境的编码进行转换,但如果输出的不是unicode对象而是普通字符串,则会直接按照字符串的编码输出字符串,从而出现上面的现

象。

使用unicode对象的话,除了这样使用u标记,还可以使用unicode类以及字符串的encode和decode方法。

unicode类的构造函数接受一个字符串参数和一个编码参数,将字符串封装为一个unicode,比如在这里,由于我们用的是utf-8编码,所以unicode中的编码参数使用’utf-8′将字符封装为

unicode对象,然后正确输出到控制台:

s1=unicode(‘哈’, ‘utf-8′)

print s1

另外,用decode函数也可以将一个普通字符串转换为unicode对象。很多人都搞不明白python字符串的decode和encode函数都是什么意思。这里简要说明一下。

decode是将普通字符串按照参数中的编码格式进行解析,然后生成对应的unicode对象,比如在这里我们代码用的是utf-8,那么把一个字符串转换为unicode就是如下形式:

s2=’哈’.decode(‘utf-8′)

这时,s2就是一个存储了’哈’字的unicode对象,其实就和unicode(‘哈’, ‘utf-8′)以及u’哈’是相同的。

那么encode正好就是相反的功能,是将一个unicode对象转换为参数中编码格式的普通字符,比如下面代码:

s3=unicode(‘哈’, ‘utf-8′).encode(‘utf-8′)

s3现在又变回了utf-8的’哈’。

python中文编码查询_Python中文编码问题相关推荐

  1. python elasticsearch查询_python 查询Elasticsearch的小例子

    #!/usr/bin/env python # -*- coding: utf-8 -*- from sfo_common.agent import Agent from sfo_common.imp ...

  2. python天气查询_Python学习笔记——天气查询代码

    天气查询代码1 # 此程序无法运行,因为中国天气网的api接口被关闭了 import urllib.request import json import pickle #建立城市字典 pickle_f ...

  3. python 火车票查询_Python,写火车票查看器,你还在担心没票吗?

    ![image](https://img-blog.csdnimg.cn/img_convert/f18828e9f341911936a88757a9c1d140.webp) 当你想查询一下火车票信息 ...

  4. python名单查询_Python爬虫实现全国失信被执行人名单查询功能示例

    本文实例讲述了python爬虫实现全国失信被执行人名单查询功能.分享给大家供大家参考,具体如下: 一.需求说明 利用百度的接口,实现一个全国失信被执行人名单查询功能.输入姓名,查询是否在全国失信被执行 ...

  5. python字典查询_python查询字典

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 开发准备cas 的 python sdk 包含了用于访问和操作 cas 的所有 ...

  6. python字典查询_python字典用法

    一:字典定义 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,字典是另 一种可变容器模型,且可存储任意类型对象.具有极快的查找速度. 字典是一种通过 ...

  7. range函数python循环次数查询_python进阶教程之循环相关函数range、enumerate、zip

    在"循环"一节,我们已经讨论了Python基本的循环语法.这一节,我们将接触更加灵活的循环方式. range() 在Python中,for循环后的in跟随一个序列的话,循环每次使用 ...

  8. python模糊查询_python实现字符串模糊匹配

    之前笔者写过一篇文章关于如何做搜索,但那篇文章的角度是从文本相似度角度写的.那种方式是目前发展的趋势,但是真正的搜索特别是网页搜索不可能在大范围的文本之间两两算相似度的.那样搜索引擎的效率会变得特别低 ...

  9. python 表格查询_python单表查询

    创建表 create table employee( id intnotnull unique auto_increment, name varchar(20) notnull, sex enum(' ...

  10. python天气查询_python天气查询

    主要通过字典查询全国各地主要城市天气情况 from urllib.request import urlopen from bs4 import BeautifulSoup import re city ...

最新文章

  1. LeetCode19. Remove Nth Node From End of List 删除链表中的倒数第n个位置的元素
  2. SCRUM的四大支柱
  3. Kernel Method的理解
  4. 宿主机访问虚拟机中xampp搭建的站点失败
  5. 【论文阅读-Bidding】《Feedback Control of Real-Time Display Advertising》
  6. 企业网站前端制作实战教程 JQuery CSS JS HTML 登录界面
  7. java未发现数据源名称并且未指定默认驱动程序_转:java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序...
  8. filewriter判断是否关闭_各种仪表故障判断,看完你也可以成为仪表维修专家
  9. Uva 247 - Calling Circles(传递闭包 / 强连通分量)
  10. 交换排序图解_10大经典排序算法,20+张图就搞定
  11. 社区团购小程序开发安装教程(基于yii框架+PHP)
  12. JavaEE企业级实战项目 智牛股第一天 概要分析和环境搭建
  13. ORACLE大数据查询
  14. 计算机毕设(附源码)JAVA-SSM化妆品销售网站
  15. 教师人生格言积极向上的句子
  16. web打印模板神器reportbro
  17. 如何关闭coreldraw x4检测弹出非法软件您的产品已被禁用怎么办?
  18. vscode一键生成佛祖保佑永无bug
  19. svn提交代码报错:svn: E175002: Unexpected HTTP status 502 ‘Bad Gateway‘
  20. 21级蓝桥选拔赛(1)

热门文章

  1. 商务邮箱有哪些?常见邮箱对比
  2. Sakai 2.6 配置
  3. 山东泰开集团 工业机器人_泰开机器人有限公司
  4. 京东联盟高级API - 高并发京东联盟转链接口 京东客转链接口 京粉转链接口 京东联盟接口,线报无广告接口
  5. User-Agent的变迁——浏览器大战之前世今生
  6. 51循迹小车舵机c语言程序,红外循迹小车c程序(舵机小车).doc
  7. 目标检测(Object Detection)—— M2Det
  8. rdkitpython | 通过反应获得断键位点与类型
  9. F2FS文件系统工具简介
  10. AE中图层叠加模式的中英对照及说明