python查看汉字的编码_python有关汉字编码问题

python分为:程序编码(python安装程序)、文件编码。

查看程序编码方式:sys.getdefaultencoding()

查看文件编码方式:1.import  chardet  2. f = open('lianxi1-qus.py')      data = f.read()     print chardet.detect(data)

字符编码发展历程:ASCII——(gb2312——(1995)gb18030——gbk——)unicode——UTF-8

ASCII:不能存中文,一个字节,8位

gb2312:能存

gb18030:能存2万多个中文

gbk:windows中都是用gbk表示中文,不是UTF-8

unicode:万能编码,占2个字节、16位。

Linux默认utf-8,Windows默认GB2312

详细字符编码查看:https://blog.csdn.net/apache0554/article/details/53889253

python3默认编码是unicode,python之前为:UTF-8

UTF-8:作为ASCII与unicode的中间码,可伸缩的。

字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。

因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码

代码中字符串的默认编码与代码文件本身的编码一致。

如:s='中文'

如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。这种情况下,要进行编码转换,都需要先用decode方法将其转换成unicode编码,再使用encode方法将其转换成其他编码。通常,在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件。

如果字符串是这样定义:s=u'中文'

则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可。

如果一个字符串已经是unicode了,再进行解码则将出错,因此通常要对其编码方式是否为unicode进行判断:

isinstance(s, unicode)  #用来判断是否为unicode

用非unicode编码形式的str来encode会报错

如何获得系统的默认编码?

#!/usr/bin/env python

#coding=utf-8

import sys

print sys.getdefaultencoding()

该段程序在英文WindowsXP上输出为:ascii

在某些IDE中,字符串的输出总是出现乱码,甚至错误,其实是由于IDE的结果输出控制台自身不能显示字符串的编码,而不是程序本身的问题。

如在UliPad中运行如下代码:

s=u"中文"

print s

会提示:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)。这是因为UliPad在英文WindowsXP上的控制台信息输出窗口是按照ascii编码输出的(英文系统的默认编码是ascii),而上面代码中的字符串是Unicode编码的,所以输出时产生了错误。

将最后一句改为:print s.encode('gb2312')

则能正确输出“中文”两个字。

若最后一句改为:print s.encode('utf8')

则输出:\xe4\xb8\xad\xe6\x96\x87,这是控制台信息输出窗口按照ascii编码输出utf8编码的字符串的结果。

unicode(str,'gb2312')与str.decode('gb2312')是一样的,都是将gb2312编码的str转为unicode编码

有关 ascii,unicode,utf8,gbk    见:http://www.cnblogs.com/guanfuchang/p/5956963.html

查看data文件(程序的编码)的编码格式:print chardet.detect(data)

查看编码类型:type(变量)

查看系统的默认编码:1.improt sys    2.print(sys.getdefaultencoding())

eg:

下载库

pip install chardet

执行

import chardet

f = open('a.doc',r)

data = f.read()

print chardet.detect(data)

结果

{'confidence': 0.64465744, 'encoding': 'utf-8'}

前面是相似度  后面是编码格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gcd(欧几里得算法)

基础 1 int gcd(int a,int b) 2 { 3 int r; 4 while(b>0) 5 { 6 ra%b; 7 ab; 8 br; 9 } 10 return a; 11 } View Code递归 1 int gcd(int a,int b) 2 { 3 return (b>0)?gcd(b,a%b):a; 4 } Vi…

网络摄像头sdk_SenseDLC嵌入式人像识别SDK 安防边缘的“小巨人”

随着这些年将人工智能技术赋能行业的不断深入,商汤科技对智慧城市建设有着更深的理解。通过不断实践发现,很多区域由于摄像头数量和布置等问题较难有效做到清晰的人脸抓拍,且单一的人脸识别会遇到诸多干扰,比如发型、胖瘦、年纪、…

使用最大似然法来求解线性模型(1)

在Coursera机器学习课程中,第一篇练习就是如何使用最小均方差(Least Square)来求解线性模型中的参数。本文从概率论的角度---最大化似然函数,来求解模型参数,得到线性模型。本文内容来源于:《A First Course of Machine Learning》…

.net aspose.words 域加载图片_使用Python批量替换csdn文章的图片链接

欢迎大家关注我的微信公众号“IT工匠”获取更多资源(涉及算法、数据结构、java、深度学习、计算机网络、python、Android等互联网技术资料)。前言笔者之前的写作习惯一直是在本地(MacTyporaIpac)写好之后将markdown代码粘贴到csdn,图片是Ipac自动上传到微博匿名图床…

Spring积累总结

1.spring 的优点: 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截&#xff0…

什么是公钥和私钥?

公钥和私钥是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),将其中的一个向外界公开,称为公钥;另一个自己保留,称为私钥。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其…

基恩士上位机链路通讯_基恩士PLC通讯源码

基恩士PLC KV7000,8000还是比较好用的,那如何和上位机通讯,我把源码写出来了。采用上位链路通讯,基恩士官方给我们留了8501端口,这个端口有意思刚好是我生日。基恩士的资料我觉得做的特别好,能快速写源代码得益于官方资料特别详细…

第二次作业+105032014101

1、测试帖链接 http://www.cnblogs.com/ELPSY/p/6605831.html 2、提出的建议 该代码基本符合编码规则所需的正确性、稳定性、可读性的要求。 程序出现错误的地方在对于2月份日期的判定上,以“2000 2 30”的输入语句符合年月日的三个输入条件,但是这并不…

fastq质量值_fastq 数据格式解析

概念介绍Read 读段Read 中文翻译: 读段,来自测序仪的raw data一个Read 可能由多个片段组成, Read的索引是测序时的顺序Sequencing quality 测序质量测序仪在测序的时候,每次测出来的结果可能都不一样(仪器误差 序列长度等各方面因…

画像分析(3-3)标签建模-模型管理-新建关系

1、关系是什么 关系,是实体与实体之间所发生的连接,通常表示某一种行为/一个事实,如成交、搜索、出行。从数据表的角度来看,这样的表通常被称为”事实表“,往往是有多个联合主键(或是说都是外键&#xff09…

二进制、八进制、十进制、十六进制之间的转换

在计算机语言中常用的进制有二进制、八进制、十进制和十六进制,十进制是最主要的表达形式。 对于进制,有两个基本的概念:基数和运算规则。 基数:基数是指一种进制中组成的基本数字,也就是不能再进行拆分的数字。二进…

myeclipse mysql 乱码_MyEclipse与mysql增改查现乱码解决方案绝对有效

设置MyEclipse文件编码。且跟mysql的连接编码一致set names gbk; SET character_set_clientutf8;SET character_set_connectionutf8;SET character_set_resultsutf8;show variables like %char%;SET character_set_clientutf8;SET character_set_connection utf8;SET character…

poj3723Conscription

题目链接&#xff1a;http://poj.org/problem?id3723 建图时将女生编号都加n&#xff08;男生数目&#xff09;&#xff0c;求最大生成树。 1 #include <cstdio>2 #include <cstring>3 #include <algorithm>4 using namespace std;5 const int maxn100001;6…

JAVA基础知识之字节和字符

一、字节的概念 1、计算机中的数据都是以二进制的形式进行存储和交换的&#xff0c;字节本质就是二进制&#xff0c;因此字节是最基本的储存单位 2、一个字节本质就是8位二进制&#xff0c;因此1个字节最小的值是0&#xff0c;最大的值是11111111&#xff0c;转换十进制…

mysql 8小时问题_Mysql经典的“8小时问题”

假设你的数据库是mysql&#xff0c;如果数据源配置不当&#xff0c;将可能发生经典的“8小时问题”。原因是mysql在默认情况下&#xff0c;如果发现一个连接的空闲时间超过8小时&#xff0c;将会在数据库端自动关闭这个连接。而数据源并不知道这个连接已经关闭了&#xff0c;当…

【BZOJ 2753】 2753: [SCOI2012]滑雪与时间胶囊 (分层最小树形图,MST)

2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 2457 Solved: 859Description a180285非常喜欢滑雪。他来到一座雪山&#xff0c;这里分布着M条供滑行的轨道和N个轨道之间的交点&#xff08;同时也是景点&#xff09;&#xff0c;而且每个景…

SortedMap接口实现排序

SortedMap接口主要提供有序的Map实现。SortedMap接口是排序接口&#xff0c;只要是实现了此接口的子类&#xff0c;都属于排序的子类&#xff0c;TreeMap也是此接口的一个子类 Map的主要实现有HashMap,TreeMap,HashTable,LinkedHashMap。 TreeMap实现了SortedMap接口&#xf…