速览

  • 全角字符与半角字符的区别
    • 外观区别: 全角字符比其对应的半角字符看起来更多出一个空格
    • 大小区别: 全角字符所占用字节数是半角字符的两倍
  • 全角字符
    • 出现的原因是为了使得中英文混排时更美观
    • 编程时两者不能混用

外观区别

可以认为,半角与全角的区别就是宽度不一致,全角比半角字符宽出一个空格的宽度
平时的半角与全角的分号可能看不出来,我们看看英文字母的全角与半角。

半角英文字母:Hello, world!
全角英文字母:Hello, world!

我可没有刻意加空格,在这里我们可以看到全角英语字母和半角英语字母在宽度上确实要宽出一个空格的距离。

大小区别

全角字符在字节占用的大小上则是半角字符的两倍,这里我们可以从它们的编码上看出。

半角英文字母:H -> 0x48, e -> 0x65, l -> 0x6C, o -> 0x6F
全角英文字母:H -> 0xFF28, e -> 0xFF45, l -> 0xFF4C, o -> 0xFF4F

半角字符的编码范围是0x00-0x7F,而全角字符的编码范围是0xFF01-0xFF5E。
转化成十进制就是半角字符的编码范围是0~272^7-1,而全角字符的编码范围是65281~65374,大约是在2162^{16}这个范围内,而一个字节占用8位
也就是说,半角字符占一个字节,全角字符占两个字节
我们再尝试将两个相同字母的编码进行想减,如H的全角编码减去H都半角编码,就可以得到0xFF28-0x48=0xFEE0,以及e的全角全角编码减去半角编码,就可以得到0xFF45-0x65=0xFEE0。
两个的答案是相同的,所以全角字母的编码是在原本半角字母的编码基础上加了一个0xFEE0得到的。

全角字符

为什么要分全角与半角?这跟中文的计算机编码有关。
不像英文字符,中文有成千上万的汉字,因此在半角的范围内,0x00~0x7F,转换过来就是0~127这个范围内,是塞不下全部的中文字符的,所以就需要扩充编码范围,于是我们的编码范围就来到了0~65535这个范围,也就是0~2162^{16}-1。
全角英文字符出现的目的是为了与全角的中文字符对齐,使得中英文混排时更加美观。例如:

半角英文字母:我喜欢Python编程。
全角英文字母:我喜欢Python编程。

不过在编程的时候两者字符是不能混用的,比如全角的双引号“”与半角的双引号""就无法进行混用,前者被视为普通字符串,后者才被识别为字符串的标志。