ASCII码

标准ASCII码使用7位二进制数表示大写或小写字母,数字0到9标点符号以及在美式英语中使用的特殊控制字符。

在标准ASCII码中,最高位(b7)用作奇偶校验位,所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分寄校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

后128个称为扩展ASCII码。许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。

常见的ASCII码大小:

换行LF为0x0A,回车CR为0x0D,空格为0x20,'0'为0x30,‘A’为0x41,'a'为0x61

查询ASCII技巧,方便查询ASCII码对应的字符:新建一个文本文档,按住ALT+要查询的码值(注意,这里是十进制),松开即可显示出对应字符。例如:按住ALT+97,则会显示出'a'。

扩展ASCII码

扩展ASCII码是从128-255的字符。

Unicode编码

注意:Unicode只是一个符号集,它规定了符号的二进制代码,却没有规定二进制代码如何存储。

所称的Unicode编码指的是UCS编码方式,即直接存入符号的Unicode二进制代码。

UTF-8编码

UTF-8是互联网上使用最广的一种Unicode的实现方式。

UTF-8是一种变长的编码方式,它使用1-4个字节表示一个符号,根据不同的符号选择不同长度的字节表示。

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

Unicode符号范围(16进制) UTF-8编码方式(2进制)
0000 0000-0000 007F 0xxxxxxx
0000 0080-0000 07FF 110xxxxx 10xxxxxx
0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

跟据上表,解读UTF-8编码非常简单。如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。

Unicode与UTF-8的转换方式:

在Windows系统最简单的方式是采用记事本打开文档然后选择编码方式另存为。

解决python乱码问题

字符串在python内部中是采用unicode的编码方式,所以其他语言先decode转换成unicode编码,再encode转换成utf8编码。编码是一种用二进制数据表示抽象字符的方式,utf8是一种编码方式。

代码中的字符串编码默认和代码文件编码相同。

python2中的unicode和python3中的str等价。可以查看s.__class__,如果为<class 'str'>则为unicode编码及文本数据,如果为<class 'bytes'>则为utf8编码及二进制数据。str(s, 'utf8')和s.decode('utf8')等价。

如果字符串在代码中被定义为s=u'中文',则s就是python内部编码unicode。

unicode类型再解码会报错。

判断一个字符串是否为unicode方法isinstance(s, unicode),python2中的unicode和python3中的str等价,所以在python3中判断一个字符串是否为unicode方法为isinstance(s, str)。

获取系统默认编码:

import sys
print(sys.getdefaultencoding())

有些IDE输出乱码是因为控制台不能输出字符串的编码不是程序本身的问题。比如windows的控制台是gb2312,则utf8的输出格式不能正确输出。

一种输出格式为gb2312避免乱码的方式:

 #coding=utf-8

 s='中文'

 if(isinstance(s, str)):
#s为u'中文'
s.encode('gb2312')
else:
#s为'中文'
s.decode('utf8').encode('gb2312')

采用标准库codecs模块

codecs.open(filename, mode='r', encoding=None, errors='strict', buffering=1)
 import codecs
f = codecs.open(filename, encoding='utf-8')

使用上边这种方式读进来utf-8文件,会自动转换为unicode。但必须明确该文件类型为utf8类型。如果是文件中有汉字,不是一个字节一个字节地读而是整个汉字的所有字节读进来然后转换成unicode(猜想跟汉字的utf8编码有关)。

下边的代码也是一种使用codecs的读写方式

#coding=utf-8
import codecs fin = open("test.txt", 'r')
fout = open("utf8.txt", 'w') reader = codecs.getreader('gbk')(fin)
writer = codecs.getwriter('gbk')(fout) data = reader.read(10)
#10是最大字节数,默认值为-1表示尽可能大。可以避免一次处理大量数据
while data:
writer.write(data)
data = reader.read(10)

借鉴:

ASCII_百度百科

阮一峰的日志

Python字符串的encode和decode研究心得——解决乱码问题

How to make unicode with python3

Difference between open and codecs.open in python

codecs——Codec registry and base classes

Python 3的bytes/str之别 codecs模块

字符编码和python使用encode,decode转换utf-8, gbk, gb2312的更多相关文章

  1. 字符编码,pyton中的encode,decode,unicode()

    1.在计算机处理的程序中,对字符的处理有两种方式:编码或译码(encoding),解码(decoding)     encoding:将字符串中的字符转换到对应编码字符集对应的代码点         ...

  2. 字符编码和Python代码操作文件

    字符编码和Python代码操作文件 读写模式之a模式 # a模式 只追加模式 # 路径不存在:自动创建 with open(r'a.txt','a',encoding='utf8') as f: pa ...

  3. 字符编码和python中的文件处理

    字符编码与python文件处理 ---------------- 字符编码 1.常见的编码 ASCII: 美国人发明的,只编码英文字母和符号,1个字节. GB2312: 中国人发明的,增加了中文汉字和 ...

  4. 字符编码和python .encode().decode()方法

    字符编码与encode.decode的问题:  用8个开关表示世界万物   ASCII :  American Standard Code for Information Interchange,美国 ...

  5. [Python函数]encode,decode

    前言: 我们知道,计算机是以二进制为单位的,也就是说计算机只识别0和1,也就是我们平时在电脑上看到的文字,只有先变成0和1,计算机才会识别它的意思.这种数据和二进制的转换规则就是编码.计算机的发展中, ...

  6. 字符编码和python文件操作

    字符编码和文件操作 目录 字符编码和文件操作 1. 字符编码 1.1 什么是字符编码 1.2 字符编码的发展史 1.2.1 ASCII码 1.2.2 各国编码 1.2.3 Unicode 1.3 字符 ...

  7. 字符编码,python解释器------总结

    目录 1. 编码: 1.字符编码 2. 编码的历史 3. 编码和解码 2. python解释器 解释代码的流程 1. 读取文本到解释器 2. 识别代码(检查语法问题) 3. 往终端打印 1. 编码: ...

  8. 字符编码到python编辑器流程

    字符(存储了信息的东西)编码(): 键盘发送的是电流-->主机(内存)接受到电流(当作010100110101)-->显示屏 接受电流(当作010100110101------->键 ...

  9. 【转】关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)

    转载地址:http://www.imkevinyang.com/2010/06/%E5%85%B3%E4%BA%8E%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81%EF%BC ...

随机推荐

  1. 【学习笔记03】Javascript数组学习

    数组定义的方法一: var Myarr=new Array(); //先声明一维 for(var i=0;i<2;i++){ //一维长度2 Myarr[i]=new Array(); //再声 ...

  2. PDO的事物处理机制

    Mysql的事务处理: 1.MySQL目前只有InnoDB 和BDB两个数据表类型才支持事务. 2.在默认条件下,MySQL是以自动提交(autocommit)模式运行的,这就意味着所执行的每一个语句 ...

  3. struts2摘记

    阐述struts2的执行流程. Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件.核心控制器FilterDi ...

  4. Android-Ant自动编译打包android项目 -- 2 ----签名与渠道包

    上篇介绍了怎么使用ant自动编译打包现有的android项目,这篇将继续介绍如果如何在ant打包应用的时候加入签名信息以及自动打包渠道包. 1. 加入签名信息: 在项目的根目录下建一个ant.prop ...

  5. QtQml 应用程序的性能考虑与建议(来自小V的翻译)

    QtQml 应用程序的性能考虑与建议 原文:csdn aidear_evo QtQml应用程序的性能考虑与建议 本文翻译自Qt官网文档:http://doc.qt.io/qt-5/qtquick-pe ...

  6. mysql DBI 事务控制

    事务: 事务是任何健壮数据库系统的基本组成,它们 防止错误和数据库腐败通过确保有关数据的改变是原子发生的(不可分割的,要么所有要么什么都不做) 这个章节应用于数据库支持事务和 AutoCommit 是 ...

  7. Multipart/form-data POST文件上传详解(转)

    Multipart/form-data POST文件上传详解 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form ...

  8. Linux学习之六-Yum命令的使用

    详细介绍一下yum命令的用法.如果你是一个Linux的初学者,一定会被软件的安装所困扰过,尽管RPM包解决了一定层度的问题,但有些RPM的包的依赖关系让人很是头疼.而YUM.APT等一些RPM包的管理 ...

  9. 全国计算机等级考试二级教程-C语言程序设计_第9章_数组

    四维数组,可用于航天卫星,三维+时间 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> ...

  10. 全国计算机等级考试二级教程-C语言程序设计_第7章_函数

    函数执行,从右到左执行 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> main() ...