字体编码
- 输入编码
- 汉字交换码
- 汉字内码
关于GB2312
输入编码:区位码:行号+列号(十进制)
交换吗:国标码:区位码转十六进制后加上2020H
汉字内码:机内码:国标码 + 8080H
几个疑问
- 国标码为什么要区位码加上2020H
- 解释:区位码是中国定义的94乘以94的一个表。一个字节只用低七位的话有127中状态。英文中0到32的字符都是些控制字符,第127位是del字符,即删除字符,所以总共有34个控制字符。(从0到127)128减去(从0到32是33加上第127位的那一个字符共34)34等于94。所以可供中文使用的是94个状态。
- 国标码其实就是交换码,是中国用来交换的,当然交换码是不能引起歧义的,94行94列的一个编码再加上32就是行号从33到126列号也是从33到126。这样就与0~32的英文控制字符没有冲突了。
- 机内码为什么要国标码加上8080H
- 解释:举例:“保”的国标码是3123H,然而:31H 和23H在ASCII中式有值的,31H在ASCII中表示数字1,23H表示的是“#”(这个可以在网上查询),那么如果我以国标码作为机内码的话,如果内存中有两个字节为31H和23H,那么到底是表示汉字“保”呢?还是字符1#呢?这样就有了歧义,但是解决办法就有了,0-127不是被英文字符占了吗?那么我就用127之后的来表示不就可以了吗?于是我把汉字的两个字节每个字节机上128(16进制就是80H)
小结
区位码 —(转十六进制–>加上2020H)—>国标码 — (加上8080H) —> 机内码