编码与解码

2023-10-26

什么是编码与解码

电脑是由电路板组成,电路板里面集成了无数的电阻和电容, 交流电经过电容的时候,电压比较低 记为低电平 , 用0表示,交流电流过电阻的时候,电压比较高,记为高电平,用1来表示; 所以每一个1 和0 在计算机中被称为
位,也就是bit位。然而,如果使用一个位来表示计算机中的最小存储单元, 那么这个存储单元只能存储0或者1,
存储的范围太小了,所以我们规定用用8个bit位为一组 来表示 计算机的最小存储单元。 8个位 每个位上能存储0或 者1,则byte的存储范围则是 00000000-11111111(换算成整数即0-255)。 这个最小存储单元 就是byte 字节。
计算机的底层只能存储0和1,如果是日常生活中遇到的数字 比如 127 ,这个可以通过10进制和二进制的转换从而
让计算机存储01111111,但是如果计算机存储类似于汉字、英文字符、符号字符等内容,是如何存储的呢?

在这里插入图片描述
根据上图解释说明,计算机提供了很多的编码表记录了字符和数字的一一对应关系,编码就是把字符对应编码表中
的码值存储在电脑中,而解码则是把码值在编码表中的对应的字符展现出来。

注意:计算机中存储一个数 是用二进制来表示的,比如 存储127,那么计算机的底层是 0111 1111,人看这些二进 制的数通常都是眼花缭乱的,如何方便而规整的表示这些二进制数呢,不妨引入十六进制。二进制换算成十六进制,则 是每四位为一组转换为16进制数即可, 比如0111 1111 这个数前4位 0111 转换为 7 , 后4位转换为F, 则最终 的16进制数是 7F,一般我繁琐的二进制数使用十六进制数来表示会比较方便规整,所以人们习惯用十六进制数来表示 码值。

计算机提供了哪些编码表呢?

常见的编码表

ASCII

世界上虽然有各种各样的字符,但计算机发明之初没有考虑那么多,基本上只考虑了美国的需求,美国大概只需要
128个字符,美国就规定了这128个字符的二进制表示方法,这个方法是一个标准,称为ASCII编码,全称是
American Standard Code for Information Interchange,美国信息互换标准代码。128个字符用7个位刚好可以表
示,计算机存储的最小单位是byte,即8位,ASCII码中最高位设置为0,用剩下的7位表示字符。这7位可以看做数
字0到127,ASCII码规定了从0到127个,每个数字代表什么含义。我们先来看数字32到126的含义,如下图所示,
除了中文之外,我们平常用的字符基本都涵盖了,键盘上的字符大部分也都涵盖了。

在这里插入图片描述
数字32到126表示的这些字符都是可打印字符,0到31和127表示一些不可以打印的字符,这些字符一般用于控制
目的,这些字符中大部分都是不常用的,下表列出了其中相对常用的字符。
在这里插入图片描述

Ascii码对美国是够用了,但对别的国家而言却是不够的,于是,各个国家的各种计算机厂商就发明了各种各样的编
码方式以表示自己国家的字符,为了保持与Ascii码的兼容性,一般都是将最高位设置为1。也就是说,当最高位为0
时,表示Ascii码,当为1时就是各个国家自己的字符。在这些扩展的编码中,在西欧国家中流行的是ISO 8859-1和
Windows-1252,在中国是GB2312,GBK,GB18030和Big5,我们逐个来研究这些编码。

ISO-8859-1
ISO 8859-1又称Latin-1,它也是使用一个字节表示一个字符,因为西欧的文字也都是字母拼接,只不过不是26个
英文字母罢了,其中0到127与Ascii一样,128到255规定了不同的含义。在128到255中,128到159表示一些控制
字符,这些字符也不常用,就不介绍了。160到255表示一些西欧字符,如下图所示:
在这里插入图片描述
windows-1252
ISO 8859-1虽然号称是标准,用于西欧国家,但它连欧元(€) 这个符号都没有,因为欧元比较晚,而标准比较早。
实际使用中更为广泛的是Windows-1252编码,这个编码与ISO8859-1基本是一样的,区别 只在于数字128到
159,Windows-1252使用其中的一些数字表示可打印字符,这些数字表示的含义,如下图所示:
在这里插入图片描述

这个编码中加入了欧元符号以及一些其他常用的字符。基本上可以认为,ISO 8859-1已被Windows-1252取代,在
很多应用程序中,即使文件声明它采用的是ISO 8859-1编码,解析的时候依然被当做Windows-1252编码。
HTML5 甚至明确规定,如果文件声明的是ISO 8859-1编码,它应该被看做Windows-1252编码。为什么要这样
呢?因为大部分人搞不清楚ISO 8859-1和Windows-1252的区别,当他说ISO 8859-1的时候,其实他实际指的是
Windows-1252,所以标准干脆就这么强制了。

GB2312

美国和西欧字符用一个字节就够了,但中文显然是不够的。中文第一个标准是GB2312。GB2312标准主要针对的
是简体中文常见字符,包括约7000个汉字,不包括一些罕见词,不包括繁体字。GB2312固定使用两个字节表示汉
字,在这两个字节中,最高位都是1,如果是0,就认为是Ascii字符。在这两个字节中,其中第一个字节范围是
1010 0001(十进制161) - 1111 0111(十进制247),第二个字节范围是1010 0001(十进制161) - 1111 1110(十进制
254)。 比如,"贤哥"的GB2312编码是

CF,CD B8,E7

为了方便的查看二进制 和 十进制 和 十六进制的转换 ,可以使用下面的两个方法。

/** 格式化打印:0b1111 -> 二进制: 1111 十进制: 15 十六进制: F */

private static void printFormatFromBinary(int binary) {
	System.out.println("二进制: "+Integer.toBinaryString(binary)+" 十进制: "+binary+" 十六进制: "+Integer.toHexString(binary).toUpperCase()); 
}

/** 格式化打印:0xFF -> 二进制: 11111111 十进制: 255 十六进制: F */
private static void printFormatFromHex(int hex){ 
	System.out.println("二进制: "+Integer.toBinaryString(hex)+" 十进制: "+hex+" 十六进 制: "+Integer.toHexString(hex).toUpperCase());
}

GBK

GBK建立在GB2312的基础上,向下兼容GB2312,也就是说,GB2312编码的字符的二进制表示,在GBK编码里是
完全一样的。GBK增加了一万四千多个汉字,共计约21000汉字,其中包括繁体字。GBK同样使用固定的两个字节
表示,其中第一个字节范围是1000 0001(十进制129) - 1111 1110(十进制254),第二个字节范围是0100 0000(十进
制64) - 0111 1110(十进制126)和1000 0000(十进制128) - 1111 1110(十进制254)。 需要注意的是,第二个字节是
从64开始的(64属于byte正数范围,和ASCII的编码重合了),也就是说,第二个字节最高位可能为0。那怎么知道
它是汉字的一部分,还是一个ASCII字符呢? 其实很简单,因为汉字是用固定两个字节表示的,在解析二进制流的
时候,如果第一个字节的最高位为1,那么就将下一个字节读进来一起解析为一个汉字,而不用考虑它的最高位,
解析完后,跳到第三个字节继续解析。
GB18030
GB18030向下兼容GBK,增加了五万五千多个字符,共七万六千多个字符。包括了很多少数民族字符,以及中日韩
统一字符。用两个字节已经表示不了GB18030中的所有字符,GB18030使用变长编码,有的字符是两个字节,有
的是四个字节。在两字节编码中,字节表示范围与GBK一样。在四字节编码中,第一个字节的值从1000 0001(十进
制129) 到11111110(十进制254),第二个字节的值从0011 0000(十进制48)到0011 1001(十进制57),第三个字节
的值从1000 0001(十进制129) 到11111110(十进制254),第四个字节的值从0011 0000(十进制48)到0011 1001(十
进制57)。 解析二进制时,如何知道是两个字节还是四个字节表示一个字符呢?很简单,看第二个字节的范围,如
果是48到57就是四个字节表示,因为两个字节编码中第二字节都比这个大。所以这样综合说明GB18030兼容
GBK,兼容GB2312,兼容ASCII,但是GB18030,GBK,GB2312这三个编码和ISO8859-1是不兼容的哦。

Big5

Big5是针对繁体中文的,广泛用于台湾香港等地。Big5包括1万3千多个繁体字,和GB2312类似,一个字符同样固
定使用两个字节表示。在这两个字节中,第一个字节范围是10000001(十进制129) 到1111 1110(十进制254),第
二个字节范围是0100 0000(十进制64) - 0111 1110(十进制126) 和1010 0001(十进制161) - 1111 1110(十进制
254)。Big5和GB18030,GBK,GB2312不兼容哈,如果已经理解了上文,其实你就能理解为什么Big5和GB的三
个编码为什么不兼容了。

编码表汇总

我们简单汇总一下上面的内容。Ascii码是基础,一个字节表示,最高位设为0,其他7位表示128个字符。其他编码都是兼容Ascii的,最高位使用1来进行区分。西欧主要使用Windows-1252,使用一个字节,增加了额外128个字符。中文大陆地区的三个主要编码GB2312,GBK,GB18030,有时间先后关系,表示的字符数越来越多,且后面的兼容前面的,GB2312和GBK都是用两个字节表示,而GB18030则使用两个或四个字节表示。香港台湾地区的主要编码是Big5。 如果文本里的字符都是Ascii码字符,那么采用以上所说的任一编码方式都是一样的,不会乱码。但如果有高位为1的字符,除了GB2312/GBK/GB18030外,其他编码都是不兼容的,比如,Windows-1252和中文的各种编码是不兼容的,即使Big5和GB18030都能表示繁体字,其表示方式也是不一样的,而这就会出现所谓的乱码。

乱码和兼容
兼容:GB2312/GBK/GB18030 ASCII是兼容的 比如我们文本里面 a字符,使用这四种码表任何一种都是可以正常显示的。
windows-1252和ISO-8859-1 和ASCII是兼容的
Big5和ASCII是兼容的,但是 西欧编码 和 Big5 以及 GB系列的编码 他们相互之间是不兼容的,也就是 同样的码值在三种编码表中显示的内
容是不一样的。

在这里插入图片描述
乱码:如果编码的时候同一种编码表,而解码的时候通过的却是一种不兼容的编码表,则就就会出现乱码现象。
在这里插入图片描述
Unicode

以上我们介绍了中文和西欧的字符与编码,但世界上还有很多的国家的字符,每个国家的各种计算机厂商都对自己常用的字符进行编码,在编码的时候基本忽略了别的国家的字符和编码,甚至忽略了同一国家的其他计算机厂商,这样造成的结果就是,出现了太多的编码,且互相不兼容。
世界上所有的字符能不能统一编码呢?可以,这就是Unicode。
Unicode 做了一件事,就是给世界上所有字符都分配了一个唯一的数字编号,这个编号范围从0x000000到
0x10FFFF,包括110多万。但大部分常用字符都 在0x0000到0xFFFF之间,即65536个数字之内。每个字符都有一个Unicode编号,这个编号一般写成16进制,在前面加U+。大部分中文 的编号范围在U+4E00到U+9FA5,例如,"贤"的Unicode是U+8D24。
Unicode就做了这么 一件事,就是给所有字符分配了唯一数字编号。它并没有规定这个编号怎么对应到二进制表示,这是与上面介绍的其他编码不同的,其他编码都既规定了能表示哪些 字符,又规定了每个字符对应的二进制是什么,而Unicode本身只规定了每个字符的数字编号是多少。

1990年开始研发,1994年正式公布。随着计算机工作能力的增强,Unicode也在面世以来的十多年里得到普及。 Unicode6.3版已发布(2013年11月)。在Unicode联盟网站上可以查看完整的6.3的核心规范。 Unicode定义了大到足以代表人类所有可读字符的字符集。 Unicode其实应该是一个码值表。Unicode的功用是为每一个字符提供一个唯一的数字码,而对数字码的存储规则的定 义则需要依靠UTF-8/UTF-16/UTF-32 UTF-8/UTF-16/UTF-32是通过对Unicode码值进行对应规则转换后,编码保持到内存/文件中。UTF-8/UTF-16都是 可变长度的编码方式。

那编号怎么对应到二进制表示呢?有多种方案,主要有UTF-32, UTF-16和UTF-8。

UTF-32
这个最简单,就是字符编号的整数二进制形式,四个字节。

但有个细节,就是字节的排列顺序,如果第一个字节是整数二进制中的最高位,最后一个字节是整数二进制中的最
低位,那这种字节序就叫“大端”(Big Endian, BE),否则,正好相反的情况,就叫“小端”(Little Endian, LE)。
对应的编码方式分别是UTF-32BE和UTF-32LE。比如
在这里插入图片描述

注意:之所以有大端和小端两种方式,是因为硬件读写顺序的不同。 大端:数据的高字节保存在内存的低地址中,低字节保存到内存的高地址中,和我们的阅读习惯一致;小端则相反,常 用的X86结构是小端模式。采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机 处理。

可以看出,每个字符都用四个字节表示,非常浪费空间,实际采用的也比较少。

注意:UTF-32是因为UTF-16编码方式不能表示全部的字符而扩充的编码方式

UTF-16

在了解 UTF-16 编码方式之前,先了解一下另外一个概念——“平面”。

在上面的介绍中,提到了 Unicode 是一本很厚的字典,她将全世界所有的字符定义在一个集合里。这么多的字符不是一次性定义的,而是分区定义。每个区可以存放 65536 个( 2^16 )字符,称为一个平面(plane)。目前,一共有 17 个( 2^5 )平面(65536*17 = 1,114,112 也就是110万),也就是说,整个 Unicode 字符集的大小现在是 2^21 。
最前面的 65536 个字符位,称为基本平面(简称 BMP ),它的码点范围是从 0 到 2^16-1 ,写成 16 进制就是从U+0000 到 U+FFFF。所有最常见的字符都放在这个平面,这是 Unicode 最先定义和公布的一个平面。剩下的字符都放在辅助平面(简称 SMP ),码点范围从U+010000 到 U+10FFFF。基本了解了平面的概念后,再说回到 UTF-16。UTF-16 编码介于 UTF-32 与 UTF-8 之间,同时结合了定长和变长两种编码方法的特点。它的编码规则很简单:基本平面的字符占用 2 个字节,辅助平面的字符占用 4 个字节。也就是说,UTF-16 的编码长度要么是 2 个字节(U+0000 到 U+FFFF,也就是),要么是 4 个字节(U+010000 到U+10FFFF)。那么问题来了,当我们遇到两个字节时,到底是把这两个字节当作一个字符还是与后面的两个字节一起当作一个字符呢?
为了将两个字节的UTF-16编码与四个字节的UTF-16编码区分开来,Unicode编码的设计者将0xD800-0xDFFF保留下来,并称为代理区(Surrogate):辅助平面的字符位共有 2^20 个,因此表示这些字符至少需要 20 个二进制位。UTF-16 将这 20 个二进制位分成两半,前 10 位映射在 U+D800 到 U+DBFF,称为高代理位(H),后 10 位映射在 U+DC00 到 U+DFFF,称为低代理位(L)。这意味着,一个辅助平面的字符,被拆成两个基本平面的字符表示。
在这里插入图片描述
如果U≥0x10000,我们先计算U’=U-0x10000,然后将U’写成二进制形式:yyyy yyyy yyxx xxxx xxxx,U的UTF-16编码(二进制)就是110110yyyyyyyyyy110111xxxxxxxxxx。
按照上述规则,Unicode编码0x10000-0x10FFFF的UTF-16编码有四个字节,前两个字节的高6位是110110,后两个字节的高6位是110111。可见,前两个字节的取值范围(二进制)是11011000 00000000到1101101111111111,即0xD800-0xDBFF。后两个字节取值范围(二进制)是11011100 00000000到11011111
11111111,即0xDC00-0xDFFF。
因此,当我们遇到两个字节,发现它的码点在 U+D800 到 U+DBFF 之间,就可以断定,紧跟在后面的两个字节的码点,应该在 U+DC00 到 U+DFFF 之间,这四个字节必须放在一起解读。
接下来,以汉字"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编码与解码 的相关文章

  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • java:错误: 无法从静态上下文中引用非静态 变量 XXX。

    我们平时编译的时候可能会遇到这样的错误 我们写的是这样一个代码 class Person String name public static void show System out println name haha class a pu
  • Hive调用python脚本实现数据清洗、统计过程

    Hive的 TRANSFORM 关键字提供了在SQL中调用自写脚本的功能 本实例通过python脚本对电影数据进行清洗 帮助读者了解hive调用python脚本的整个流程 操作步骤 1 创建基表 CREATE TABLE u data us
  • 异步GET请求方法

    同步请求的用户体验不是很好 因此很多情况下我们会采用异步调用 iOS SDK也提供了异步请求的方法 而异步请求会 使用NSURLConnection委托协议NSURLConnectionDelegate 在请求的不同阶段 会回调委托 对象的
  • CVE-2021-35464: ForgeRock AM远程代码执行漏洞通告

    报告编号 B6 2021 063002 报告来源 360CERT 报告作者 360CERT 更新日期 2021 06 30 0x01 漏洞简述 2021年06月30日 360CERT监测发现portswigger发布了ForgeRock A
  • python中一些写法实例和小练习

    1 用户输入一个数字 并计算这个数字的平方根 关键 使用指数运算符 来计算该数的平方根 该程序只适用于正数 负数和复数可以使用以下的方式 说明 在使用print函数输出时 也可以对字符串内容进行格式化处理 上面print函数中的字符串 1
  • 深度卷积神经网络在目标检测中的进展

    作者 travelsea 链接 https zhuanlan zhihu com p 22045213 来源 知乎 近些年来 深度卷积神经网络 DCNN 在图像分类和识别上取得了很显著的提高 回顾从2014到2016这两年多的时间 先后涌现
  • 【无标题】

    1 直达软件 由直达国际的子公司上海直达软件有限公司出品 提供期货交易全套解决方案的专业软件 全球化交易平台 结算系统 风险管理平台及程序化交易等产品 为公司客户提供稳定 快速的交易系统 2 易盛极星 易盛极星 是由郑州商品交易所的全资子公
  • BigDecimal 如何在一个区间的比较

    BigDecimal 如何在一个区间的比较 背景 由于BigDecimal 的精度比较高 在计算的时候有时候存入数据库的时候会进行四舍五入 会对后面的结果判断存在误差 所以比较的结果会在一个区间的 public static boolean
  • vim编辑文件使用案例

    1 前置知识点了解 操作流程 编辑文件指令 vim 文件名 点击键盘 i 键 模式由默认的 命令模式 变成 插入模式 编辑文件内容 完成后点击键盘 Esc 键 模式由 插入模式 变成 命令模式 同时点击键盘 shift 键 模式由 命令模式
  • python接口自动化(四)--接口测试工具介绍(详解)

    简介 工欲善其事必先利其器 通过前边几篇文章的介绍 大家大致对接口有了进一步的认识 那么接下来让我们看看接口测试的工具有哪些 目前 市场上有很多支持接口测试的工具 利用工具进行接口测试 能够提供测试效率 例如 假 入让你一天完成100个接口
  • docker-compose常见问题

    一 新版本网络桥接 问题 docker errors InvalidArgument host network mode is incompatible with port 1 24 0以前可以network mode host和ports
  • Python List 按照多个关键字排序

    最近刷刷题遇到的 发现还没有一模一样的答案 自己做个解答 以列表有两列为例 我们需要按照两列排序 可以利用sorted和lambda组合 l a 2 c 1 d 4 b 2 sorted l key lambda x x 1 x 0 rev
  • 小程序实现h5页面的微信支付php,微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析...

    前言 小程序支持webview以后 我们开发的好多h5页面 就可以直接在小程序里使用了 比如我们开发的微信商城 文章详情页 商品详情页 就可以开发一套 多处使用了 我们今天来讲一讲 在小程序的webview里实现微信支付功能 因为微信不允许
  • 面向对象、面向过程的思考

    把问题和答案记下来 过段时间再自己回答 几 次 2014年04月30号 师傅 思考一个问题 面向对象编程 和 面向过程编程 两类型的语言又什么区别 我 面向对象编程 最大的感觉就是分工的明确 从小的方面来说 就是把程序里面的一个个对象 类
  • 解剖上海交大女生无耻言论:只嫁外国人?

    上海交大MM的不嫁中国男人自白书原文 我是上海交大的一名女大学生 我第一次发帖子 写的不好 请大家表笑偶 每个人都有人生理想 有的人想成为英雄 有人的想成为富翁 有的人渴望成为领袖 我呢 人生最大的愿望就是嫁给一个西方男人 有人会说我很庸俗
  • 重定向与请求转发,以及它们之间的区别

    重定向 在某些情况下 针对客户端的请求 一个Servlet类可能无法完成全部工作 这时 可以使用请求重定向来完成 所谓请求重定向 是指Web服务器接收到客户端的请求后 可能由于某些条件限制 不能访问当前请求URL所指向的Web资源 而是指定
  • 高效管理之团队梯度建设

    经常听人讲 我们要建设高效的团队 如何提高团队的执行效率等等 空谈效率没有意义 这篇文章结合作者自身的经历 谈谈梯度团队是什么样子的 为什么一个有梯度的团队是高效的 以及在管理中如何建设这样的团队 梯度团队介绍 下图是我经历的一家中型互联网
  • Linux下VIM编辑器的详细使用

    1 VI编辑器的启动与退出 vi file1 新建一个文本文件为file1 q 在末行模式下退出 2 文本的操作 e file1 在当前文件下编辑新的文件 r etc passwd 实现文件的读入功能 wq 保持并退出 q 强行退出 3 光
  • Qt的容器类——QList

    定义 QList lt T gt 以数组列表形式实现 在其前后添加数组非常快 注意Qt中有很多函数返回了QList类型 要遍历这些返回的容器 必须先复制再遍历 因为Qt使用了隐式复制 所以开销并不大 当一个迭代器在操作一个容器时 不要复制这
  • 编码与解码

    什么是编码与解码 电脑是由电路板组成 电路板里面集成了无数的电阻和电容 交流电经过电容的时候 电压比较低 记为低电平 用0表示 交流电流过电阻的时候 电压比较高 记为高电平 用1来表示 所以每一个1 和0 在计算机中被称为 位 也就是bit