Base64编码

Base64编码是将任意二进制数据转换为可打印的ASCII字符。

从8位到6位

它是将一个8位字节序列拆散为6位,并为每个6位片段分配一个字符(2^6=64,推之Base64字符集为64个以内,实际65个字符)。Base64的码表为:

Encoding Img

来个实例,下图以中文编码两个字符(utf-8格式)为例:

Encoding Img

可以在Base64 Decode and Encode - Online上验证一下结果。

补码

Base64编码是将二进制截成每6位一个单位,会有二进制序列不能正好平均分成6位块的情况,这时要在序列末尾填充零位,补够总位数是6*8的最小公倍数,任何完全填充的6位组由特殊的第65个符号=表示。比如ASCII码的字符a

Encoding Img

用途

Base64编码是对二进制序列为操作对象,那对于任意的二进制序列都可以编码,如文件。 在网上搜集了一些Base64编码应用:

  • CSS中url属性:适用于小图片,减少HTTP请求数。
  • 早期电子邮件中
  • 简单加密:防君子不防小人的加密方式
  • HTTP基本认证
  • 文件入库:将文件的二进制流转换成文本存入数据库

实现

JavaScript实现

在线工具 ...

more ...

URL编码


URL(统一资源定位符, Uniform Resource Location)是URI(统一资源标识符, Uniform Resource Identifier)的一种,一般来讲,URL是Internet上用来描述信息资源的字符串,用于客户端访问www服务器或其它服务器的方式。来几个URL:

* ftp://host/filepath/
* http:// 
* ftp://表示通过文件传输协议FTP访问FTP服务器。  
* telnet://表示通过远程登录协议Telnet进行远程登录。  
* gopher://表示通过gopher协议访问Gopher服务器。

当然协议也可以自己扩展。

这个不扯太多,今天只讨论编码。

URL中包括中文

看代码,文件名编码-test.html放到tomcat(全局web.xml配置listings设置成true)下webapp目录下中的encoding目录下

<!DOCTYPE html>
<html>
<head>
    <meat charset="utf-8"/>
</head>
<body>
    <form>
        <input name="q ...
more ...

http中的字符编码

字符编码python中的字符编码两文对字符编码简单的介绍。现在开始讨论http中的编码问题,当完成编码系列的文章后,开始完成一系统http的文章,本文还是需要一些http基本的知识。

做为java出身的coder,今天还是用python语言来实现http的实例,java实现个东西太麻烦,Simple is better than complex.

响应头中的Content-Type

我们知道http响应报文,包括两部分实体首部(响应头)和实体主体(响应主体),响应头是对主体内容的描述,告知浏览器怎么处理主体内容(文本,图片等等)。上代码:

#coding=utf-8

from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler

class MyRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-Type', 'text ...
more ...

python中的字符编码

上篇字符编码对字符编码做了简单的介绍,除了演示几个简单的例子外,没有将字符编码编程语言,看本文的标题相信就明白,这是与伟大的python结合一些实例(python版本为2.7.5)。

准备工作,去码表(GB2312, Unicode, UTF-8)查取编码的GB2312和Unicode字符集编码及按gb2312和utf-8编码方式保存的二进制。注意,要亲自查一下 哦~~

编码                  对应十六进制
GB2312字符集:        b1e0 c2eb
GB2312编码(同上):     b1e0 c2eb
Unicode字符集:       7f16 7801
UTF-16编码(同上):     7f16 7801
UTF-8编码:            e7bc96 e7a081

字符串操作

话不多说,打开python解释器,输入:

>>> s = '编码'
>>> s ...
more ...

字符编码


每个软件开发人员应该无条件掌握的知识!


字符编码是一个基础话题,不管你从事哪种语言的开发,还是前端、后端或网络开发,乱码问题一直困扰着像我这样的低水平的生手。接下来的内容是我参考了好多的文章,并整理的便于自己理解的脉络。
就像别人一样的开场:计算机比较傻,在它的世界里只有 1 0,如何才让人类可理解的字符(Character,如字母、数字,一些符号,汉字...)打印到显示屏幕上呢。这需要有一个从由1 0组合成的序列到可打印字符的一个映射 (编码Encoding),可打印的字符是一个集合(字符集Charset)。在这里就引出了几个概念:

  • 字符(Character):是文字与符号的总称,包括文字、图形符号、数学符号等。
  • 字符集(Charset):即字符的集合,规定了在这些集合里面有哪些字符。
  • 字符编码(Encoding):就是规定用一个字节还是多个字节来存储一个字符,用固定的二进制码值表示某个字符。
  • 字节(byte):计算机中存储数据的单元,一个8位的二进制数,是一个很具体的存储空间 ...
more ...