一直以来,字符串的编码问题对于新手程序员来说,或者平常不太涉猎这方面的程序员来说,是犹如灵异学一样的存在。经常会遇到莫名其妙的编码问题,导致的各种的无法理解的错误。
今天,本问就来介绍一下作者所知晓的一切的字符编码知识。
0x1.初识ASCII
说起字符串编码,不得不说到现代计算机的起源,在二十世纪早期,美国的科学家和工程师开始研究并开发原始的计算机设备。一些早期的计算机设备和概念都是在美国发展的,为后来的计算机技术的发展奠定了基础。
因此最早的计算机主要编码都是为了适应英文来设计的,英文由字母、数字、标点符号等组成。总计26个英文字母(不区分大小写)、10个数字(0-9)、大约32个常见标点符号(包括空格)
0x2.随着更多国家加入互联网,兼容语言日益重要
随着国际化的发展和不同国家语言的日益重要,需要一种能够表示更多字符的编码方式。因此,针对不同的需求,出现了一些扩展字符集和编码标准,其中两个最常见的是GBK和UTF-8。
- GBK 是汉字内码扩展规范的简称,是在ASCII基础上的汉字编码扩展。它对中文进行了编码,并能够表示超过 20000 个中文字符。它兼容ASCII编码,并使用1个或2个字节来表示一个字符,使得它能够包含更多的字符。
- 基本原理:
- GBK编码使用单字节编码和双字节编码混合的方式来表示字符。
- 对于ASCII字符,使用单字节表示,编码和ASCII兼容。
- 对于非ASCII字符(包括汉字等),使用双字节表示。
- 编码范围:
- 单字节编码范围:0x00-0x7F,与ASCII相同。
- 双字节编码范围:0x81-0xFE,两个字节的第一个字节在0x81-0xFE之间,第二个字节在0x40-0xFE之间(但不包括0x7F)。
- 占位个数:
- 对于单字节编码的ASCII字符,占用一个字节(8位)。
- 对于双字节编码的非ASCII字符,占用两个字节(16位)。
- 编码规则:
- 对于双字节编码,第一个字节的范围确定了该字符的编码区,第二个字节的范围则确定了具体的字符。
- GBK编码的中文字符通常使用两个字节表示,第一个字节的范围是0x81-0xFE,第二个字节的范围是0x40-0xFE(不包括0x7F)。
- 例如,汉字“中”在GBK编码中的值是0xD6D0。
- 兼容性:
- GBK编码是对GB2312编码的扩展,因此GB2312编码的中文字符在GBK中仍然能够正确解码。
- 同时,GBK编码也与ASCII编码兼容,保证了在同一个文本文件中可以混合使用ASCII字符和汉字字符。
- UTF-8 是一种针对Unicode的可变长度字符编码,它被设计用来在互联网上处理多种语言的文本。UTF-8 使用1至4个字节为每个字符编码,能够表示地球上几乎所有的文字。它是一种广泛使用的编码标准,可以表示包括拉丁字母、希腊字母、西里尔字母、亚美尼亚字母、希伯来字母、阿拉伯字母、叙利亚字母、泰米尔字母等在内的几乎所有的语言的字符。
- 基本原理:
- UTF-8 使用 8 位字节序列来表示一个 Unicode 字符。
- UTF-8 根据所表示的字符的不同范围,使用不同长度的字节序列表示字符。
- 编码范围:
- 单字节编码范围:0x00-0x7F,服务器托管网与 ASCII 编码完全兼容。
- 双字节编码范围:0xC2-0xDF,0x80-0xBF。
- 三字节编码范围:0xE0-0xEF,0x80-0xBF,0x80-0xBF。
- 四字节编码范围:0xF0-0服务器托管网xF4,0x80-0xBF,0x80-0xBF,0x80-0xBF。
- 占位个数:
- 对于单字节编码的 ASCII 字符,占用一个字节(8 位)。
- 对于多字节编码的 Unicode 字符,根据其在 Unicode 编码中的范围,使用 2 到 4 个字节(16 到 32 位)。
- 编码规则:
- 对于单字节编码的 ASCII 字符,其最高位是 0。
- 对于多字节编码的 Unicode 字符,每个字节的最高位都是 1,紧跟着的一个 0 位表示该字节不是编码的最后一个字节。
关于了解这些字符编码特性的好处
常见的可用于JS的加密/解密,不同字符编码之间的转换等特性都可以用于JS加密,同样可以用于JS逆向的逻辑中。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
1、饿汉式(线程安全,调用效率高,但是不能延时加载): public class ImageLoader{ private static ImageLoader instance = new ImageLoader; private ImageLoader()…