字符编码

二维码的生成细节和原理

房东的猫 提交于 2019-12-16 03:41:01
二维码的生成细节和原理 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。这两天学习了一下二维码图片生成的相关细节,觉得这个玩意就是一个密码算法,在此写一这篇文章 ,揭露一下。供好学的人一同学习之。 关于QR Code Specification,可参看这个PDF: http://raidenii.net/files/datasheets/misc/qr_code.pdf 基础知识 首先,我们先说一下二维码一共有40个尺寸。官方叫版本Version。Version 1是21 x 21的矩阵,Version 2是 25 x 25的矩阵,Version 3是29的尺寸,每增加一个version,就会增加4的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高Version 40,(40-1)*4+21 = 177,所以最高是177 x 177 的正方形。 下面我们看看一个二维码的样例: 定位图案 Position Detection Pattern是定位图案,用于标记二维码的矩形大小。这三个定位图案有白边叫Separators for Postion Detection Patterns

面试官问你编码相关的面试题,把这篇甩给他就完事!

南笙酒味 提交于 2019-12-16 00:12:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前情回顾: Java中一个字符占两字节 但为什么new String("字").getBytes().length 返回3个字节 今天主要聊一聊: 字节 字符 字符集 编码 字符编码 Java 内码和外码 Unicode 字节 例如 :00001111 这个8位二进制数就占了一个字节的存储容量。 字节(英语:Byte),通常用作计算机信息计量单位,不分数据类型。 一个字节代表八个比特(英语:Bit)。这个是最基本的概念了,字节是计算存储容量的一种计量单位,计算机只能识别1和0组成的二进制位。一个数就是1位(bit),为了方便计算,我们规定8位就是一个字节。 例如 :00001111 这个8位二进制数就占了一个字节的存储容量。 字符 字符和字节不太一样,任何一个文字或符号都是一个字符,但所占字节不一定,不同的编码导致一个字符所占的内存不同。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。 也就是说,一个数字是一个字符,一个文字是一个字符,一个标点符号也是一个字符。 1 是 字符,“汉” 是字符,“!”感叹号是字符。 字符集   charset 是 character set 的简写,即字符集。字符的集合就叫字符集。ASCII字符集就是下表中的 字符那一列的所有字符的集合 。 编码

ascii、unicode、utf-8、gbk 区别?

限于喜欢 提交于 2019-12-15 14:11:44
发展史: https://www.cnblogs.com/houxt/p/11250878.html python2内容进行编码(默认ascii),而python3对内容进行编码的默认为utf-8。 ascii: 最多只能用8位来表示(一个字节),即:2**8 = 256(即pow(2,8)=256),所以,ASCII码最多只能表示256个符号。 unicode:万国码,任何一个字符==两个字节 utf-8:万国码的升级版,一个中文字符==三个字节,英文是一个字节,欧洲的是2个字节 gbk:国内版本,一个中文字符==2个字节,英文是一个字节 gbk转utf-8,则需通过媒介unicode ascii A:00000010 8位 一个字节 unicode A:00000000 00000001 00000010 00000100 32位 四个字节 中:00000000 00000001 00000010 00000100 32位 四个字节 utf-8 A:00000110 8位 一个字节 中:00000010 00000110 16位 两个字节 gbk A:00000110 8位 一个字节 中:00000010 00000110 16位 两个字节 1,各个编码之间的二进制,是不能互相识别的,会产生乱码。 2,文件的存储,传输,不能是unicode (只能是utf-8 utf-16

MySQL中文乱码的解决方法

左心房为你撑大大i 提交于 2019-12-15 08:25:37
小可爱们是不是刚安装数据库呢,然后插入中文数据发现乱码了,或者用python,java等语言操作去数据库插入数据的时候报错了,好下面有解决方法。 添加或修改 my.ini 配置文件,设置字符编码为 utf8 ,默认编码为latin1 修改前为:(如图片所示) 然后把下面这段内容加到文件中去: [client] default-character-set=utf8 [mysql] default-character-set=utf8 //设置mysql客户端默认字符集 [mysqld] character-set-server=utf8 #注意加的过程要一一对应, 加完之后重启一下服务 ,然后到数据库中执行 SHOW VARIABLES LIKE “char%”; 查询都变成了utf8,问题解决。 mysql> show variables like “char%”; ±-------------------------±----------------------------------------------+ | Variable_name | Value | ±-------------------------±----------------------------------------------+ | character_set_client | utf8 | |

HTTP基础原理与koa-bodyparser原理解析

戏子无情 提交于 2019-12-14 21:48:52
一、前置知识   在理解koa-bodyparser原理之前,首先需要了解部分HTTP相关的知识。 1、报文主体   HTTP报文主要分为请求报文和响应报文,koa-bodyparser主要针对请求报文的处理。   请求报文主要由以下三个部分组成: 报文头部 空行 报文主体   而koa-bodyparser中的body指的就是请求报文中的报文主体部分。 2、服务器端获取报文主体流程   HTTP底层采用TCP提供可靠的字节流服务,简单而言就是报文主体部分会被转化为二进制数据在网络中传输,所以服务器端首先需要拿到二进制流数据。   谈到网络传输,当然会涉及到传输速度的优化,而其中一种优化方式就是对内容进行压缩编码,常用的压缩编码方式有: gzip compress deflate identity(不执行压缩或不会变化的默认编码格式)   服务器端会根据报文头部信息中的Content-Encoding确认采用何种解压编码。   接下来就需要将二进制数据转换为相应的字符,而字符也有不同的字符编码方式,例如对于中文字符处理差异巨大的UTF-8和GBK,UTF-8编码汉字通常需要三个字节,而GBK只需要两个字节。所以还需要在请求报文的头部信息中设置Content-Type使用的字符编码信息(默认情况下采用的是UTF-8),这样服务器端就可以利用相应的字符规则进行解码,得到正确的字符串。

Base64 编码的特征

自闭症网瘾萝莉.ら 提交于 2019-12-14 17:23:10
base64编码后的字符串的长度一定会被4整除,包括用作后缀的等号吧;如果明文字符数不能被3整除,余1时,1个字符转为2个,补2个等号,共4个字符;余2时,2个字符转为3个字符,补1个等号,共4个字符;其实归根结底就是一句话:经过base64编码后的字符串长度一定会被4整除(包括后缀等号) 1.标准base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号; 2.base64是把3个字节变成4个可打印字符,所以base64编码后的字符串一定能被4整除(不算用作后缀的等号); 3.等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2; 4.严格来说base64不能算是一种加密,只能说是编码转换。使用base64的初衷。是为了方便把含有不可见字符串的信息用可见字符串表示出来,以便复制粘贴; 来源: CSDN 作者: 软件三班李同学 链接: https://blog.csdn.net/qq_42078370/article/details/103540482

字符编码

≡放荡痞女 提交于 2019-12-14 11:18:20
字符编码 Problem Description 请将一串长度为5的纯字母文本译成一个密码,密码规律如下:用原来的字母后面的第4个字母代替原来的字母。如C用G代替(文本中不存在W/w、X/x、Y/y、Z/z等字母),最后得到的文本即为密码。 Input 输入一串文本,长度固定为5。 Output 输出对应的密码。格式为: password is 密码 Sample Input China Sample Output password is Glmre # include <stdio.h> # include <stdlib.h> int main ( ) { char str [ 6 ] ; int i ; gets ( str ) ; for ( i = 0 ; i < 5 ; i ++ ) { str [ i ] + = 4 ; } printf ( "password is " ) ; puts ( str ) ; return 0 ; } 来源: CSDN 作者: 咕咕咕咕咕~ 链接: https://blog.csdn.net/qq_45666654/article/details/103536132

关于tomcat对编码不正确的url参数报错的解决

天涯浪子 提交于 2019-12-14 09:30:33
按照规范,url参数必须使用限定字符,其它字符需要进行编码,用像js的encodeurlcomponent函数。 在IE和360浏览器的兼容模式,不会自动对url的参数进行编码,会导致tomcat报错。 对浏览器参数进行编码就解决了问题。 Stack Overflow上有问到这个,但是解答不正确,点支持的很少。 百度搜索结果也有提到,说要在nginx对请求进行编码。 来源: https://www.cnblogs.com/silvestris/p/12038063.html

ASCII码详解

ぃ、小莉子 提交于 2019-12-13 00:48:19
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于 拉丁字母 的一套电脑编码系统,主要用于显示现代 英语 和其他 西欧 语言。它是现今最通用的单 字节 编码 系统,并等同于 国际 标准ISO/IEC 646。 请注意,ASCII是American Standard Code for Information Interchange缩写,而不是ASCⅡ(罗马数字2),有很多人在这个地方产生误解。 标准表 Bin(二进制) Oct(八进制) Dec(十进制) Hex(十六进制) 缩写/字符 解释 0000 0000 0 0 00 NUL(null) 空字符 0000 0001 1 1 01 SOH(start of headline) 标题开始 0000 0010 2 2 02 STX (start of text) 正文开始 0000 0011 3 3 03 ETX (end of text) 正文结束 0000 0100 4 4 04 EOT (end of transmission) 传输结束 0000 0101 5 5 05 ENQ (enquiry) 请求 0000 0110 6 6 06 ACK (acknowledge) 收到通知 0000 0111 7 7 07 BEL (bell

SQL server的字段类型详解

泪湿孤枕 提交于 2019-12-12 18:02:34
SQL server的字段类型详解 bit 整型 bit数据类型是整型,其值只能是0、1或空值。这种数据类型用于存储只有两种可能值的数据,如Yes 或No、True 或False 、On 或Off. 注意:很省空间的一种数据类型,如果能够满足需求应该尽量多用。 tinyint 整型 tinyint 数据类型能存储从0到255 之间的整数。它在你只打算存储有限数目的数值时很有用。这种数据类型在数据库中占用1 个字节. 注意:如果bit类型太单调不能满足您的需求,您可以考虑用tinyint类型,因为这个类型相对也是比较安全的,不接受恶意脚本内容的嵌入。 smallint 整型 smallint 数据类型可以存储从- 2的15次幂(-32768)到2的15次幂(32767)之间的整数。这种数据类型对存储一些常限定在特定范围内的数值型数据非常有用。这种数据类型在数据库里占用2 字节空间. 注意:如果tinyint类型太单调不能满足您的需求,您可以考虑用smallint类型,因为这个类型相对也是比较安全的,不接受恶意脚本内容的嵌入。 int 整型 int 数据类型可以存储从- 2的31次幂(-2147483648)到2的31次幂 (2147483 647)之间的整数。存储到数据库的几乎所有数值型的数据都可以用这种数据类型。这种数据类型在数据库里占用4个字节. 注意