第二讲:编码详解,防止中文乱码

编码详解

编码支持:

  1. ASCII编码:美国信息交换标准代码(American Standard Code for InformationInterchange,简称ASCII)是一种用于信息交换的美国标准代码,它的作用是给英文字母、数字、标点、字符转换成计算机能识别的二进制数规定了一个大家都认可并遵守的标准。
  2. GB2312编码:适用于汉字处理、汉字通信等系统之间的信息交换
  3. GBK编码:是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码
  4. ANSI是与你使用的windows操作系统的语言有关系的,向windows 7 简体中文版就是GBK(用一个字节表示英文,用两个字节表示一个中文)
  5. Unicode编码:这是一种世界上所有字符的编码,但是它没有规定的存储方式。Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。
  6. UTF-8编码:是 Unicode Transformation Format - 8 bit 的缩写, UTF-8 是 Unicode 的一种实现方式。它是可变长的编码方式,可以使用 1~4 个字节表示一个字符,可根据不同的符号而变化字节长度。UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码,继续工作。

可以这么理解,unicode包括utf-8,utf-8包括gbk,gbk包括gb2312。

一、文件格式防止中文乱码三部曲:

第一步:把文件保存为utf-8格式;

第二步:在第一行添加编码:#encoding=utf-8或#coding=utf-8

第三步:中文前加u(此u是unicode的意思)

例子:

raw_input(u"请输入字符串".decode(‘utf-8‘).encode(‘gbk‘))

在decode的基础上解码了,再加上‘u‘会报错,因为u的意思是解码成unicode,如果再decode就会重复作用,会报错

二、编码转换:

终极原则:decode early , unicode everywhere , encode late

“gbk”--->decode (‘gbk‘)---> unicode--->encode(‘utf-8‘)

decode解码:其他编码的字符串转换成unicode编码,如name.decode(‘gbk‘),将gbk编码的字符串name转换成unicode编码

encode编码:将unicode编码转换成其他编码的字符串,如name.encode(‘gbk’),将unicode编码的name字符串转换为gbk编码

备注:(进行编码时必须知道name是哪一种编码,type(‘name‘)查询)

三、文件存储和读取的编码:

1、在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

2、用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:

2、浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器。很多网页的源码上会有类似<meta charset="utf-8"/>的信息,表示该网页正是用的UTF-8编码

原文地址:https://www.cnblogs.com/wenxiacui/p/10888144.html

时间: 2024-10-09 16:01:48

第二讲:编码详解,防止中文乱码的相关文章

详解Linux中文乱码问题终极解决方法

详解Linux中文乱码问题终极解决方法 方法一: 修改/root/.bash_profile文件,增加export LANG=zh_CN.GB18030 该文件在用户目录下,对于其他用户,也必须相应修改该文件. 使用该方法时putty能显示中文,但桌面系统是英文,而且所有的网页中文显示还是乱码 例: cd ~ vim .bash_profile 直接写入 export LANG=zh_CN.GB18030 之后重启 就ok了 方法二: 修改/etc/sysconfig/i18n文件 #LANG=

[转]各种字符集和编码详解

在软件的编码和实现中,我们可能会碰到个 一个比较头疼的问题--编码,不同字符间的编码和解码,你确定了解各种字符的编码吗?一个朋友问到了我这个问题,我虽然能回答一两个出来,但是感觉已经有点模糊,混乱了,在网上搜了搜,在书上翻了翻,总结一下吧.首先按照字符编码的历程来看: 1.  ASCII 我们需要了解的最早编码是ASCII码.它用7个二进制位来表示,由于那个时期生产的大多数计算机使用8位大小的字节,因此用户不仅可以存放所有可能的ASCII字符,而且有整整一位空余下来.如果你技艺高超,可以将该位用

【转】编码详解(下)

第二部分:JSP相关编码设置 2.1 JSP页面本身的编码形式 <%@ page language="java" import="java.util.*" pageEncoding="utf-8″%>pageEncoding 指的是jsp文件本身在本地保存时的编码方式.注意:在eclipse环境下会根据pageEncoding保存的. 2.2 服务器端发送字节流的编码 <%@ page contentType="text/htm

【转】编码详解(上)

第一部分:编码的种类 编码规范用于规定可见字符和控制字符的二进制表示形式,它分为多种类型:下面详细说说编码的方式: 1.1      ANSI编码 这种编码方式规定了英文占用了一个字节,中文占用两个字节(这个是我们通常所说的编码方式).因为汉字分为多个类型:有简体中文,有繁体中文,还有日语中的汉字.所以ANSI编码又分为:GB2312(简体中文),BIG5(繁体中文),JIS(日文)等各自的编码标准. 1.2 ASCII编码 这是美国上世纪60年代制定的.ASCII码一共规定了128个字符的编码

[转] 从此不再惧怕URI编码:JavaScript及C# URI编码详解

混乱的URI编码 JavaScript中编码有三种方法:escape.encodeURI.encodeURIComponent C#中编码主要方法:HttpUtility.UrlEncode.Server.UrlEncode.Uri.EscapeUriString.Uri.EscapeDataString JavaScript中的还好,只提供了三个,C#中主要用的就有这么多,还没有列出其他编码(HTML),一多就弄不明白,弄不明白就心生恐惧,心生恐惧就变得苦逼,本文就向大家详细解释在JavaSc

Python字符编码详解(转)

1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号.不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础. 1.2. MBCS 然而计算机世界里很快就有了其他语言,单字节的ASCII已无法满足需求.后来每个语言就制定了一套自己的编码,由于单字节

mysql编码详解

在开发程序的时候,我们使用mysql数据库开发的时候,有时会碰到自己明明输入的是中文,为什么数据库中存储的就是???? 1.在配置Connection URL时,加上?useUnicode=true&characterEncoding=utf-8 2.编辑/etc/my.cnf 在[mysqld]下添加 default-character-set=utf8 在[client]下添加 default-character-set=utf8   可是这样做的原理是什么?为什么这样做就能解决问题那? 逐

Python 之路 Day02 -基础数据类型及编码详解

  基础篇 本章大纲: 字符编码和解释器编码详解 变量命名规则 基础数据类型(一) int 基础数据类型(二)  string 基础数据类型(三) bool 基础数据类型(四) list 基础数据类型(五) tuple 基础数据类型(六) dict 基础数据类型(七) set 补充可迭代对象的循环连接及enumerate输出 字符编码和解释器编码详解 一,编码的重要性: 1.1 文件编码和字符编辑编码及读取编码 #!/usr/bin/env python #-*- coding:utf-8 -*

java中文乱码解决之道(二)-----字符编码详解:基础知识 + ASCII + GB**

在上篇博文(java中文乱码解决之道(一)-----认识字符集)中,LZ简单介绍了主流的字符编码,对各种编码都是点到为止,以下LZ将详细阐述字符集.字符编码等基础知识和ASCII.GB的详情. 一.基础知识 在了解各种字符集之前我们需要了解一些最基础的知识,如:编码.字符.字符集.字符编码基础知识. 编码 计算机中存储的信息都是用二进制表示的,我们在屏幕上所看到文字.图片等都是通过二进制转换的结果.编码是信息从一种形式或格式转换为另一种形式的过程,通俗点讲就是就是将我们看到的文字.图片等信息按照