字符编码相关

文本编辑器操作文本文件的过程:

1,文本编辑器打开文件,读入二进制序列

2,如果有BOM头,直接根据BOM头使用相应的字符编码解码方式,如果没有,则根据一套算法得出该文件最有可能为哪种编码,再使用相应的解码方式解码。

或者先使用默认的解码方式(ANSI)进行解码,遇到问题再调用适配算法进行解码方式适配。

3,文本编辑器解码完成,将得到的二进制码和解码方式传给操纵作系统,操作系统根据得到的字节码和解码方式再转成系统内部指定的编码方式存储在内存中显示出来。

4,编辑完成进行保存时,先将内存中的字节码转换成所需保存的文本的编码方式,再将转换好的字节码写入到文件中。

PS:windows内部制定编码方式为UNICODE(UTF-16 LE),linux为UTF-8;

相关事项:

1,直接由文本编辑器复制/剪切得到的是内存中相应的字符串,这些字符串是由系统内部指定的编码方式编码的。

2,因为文字显示统一使用系统内部指定的编码,所以不会出现编码不同的文件之间相互复制黏贴时出现乱码现象。


 PPPPPS,以上信息有待测试,有些说这个用于显示的编码方式是ANSI,如控制台就是默认使用ANSI代码页.


输入法相关:

1,文本编辑器向操作系统申请写入操作。

2,操作系统判定是否需要IME(输入法软件)。

3.1,如果不需要,直接将键盘按键映射成相应字节码(系统内部编码编码)存储到相应内存区再显示出来(PS:这一步是否会反馈给文本编辑器有待验证)

3.2,如果需要,则启动IME,将键盘信号传给IME处理。

4,IME得到键盘信号,根据自己的输入法规则得到最终的字符,将该字符的字节码传回给系统

PS:该字符的编码方式为系统内部编码方式,所以输入法软件只管适配系统内部编码方式即可。

5,系统将得到的字节码存储到相应内存区,再显示出来(PS:这一步是否会反馈给文本编辑器有待验证)



编码相关:

1,主要的编码为UNICODE,GB2312,GBK,GB10800,BIG5,JIS....

UNICODE:分基本字符面和扩展字符面,基本字负面包含6W余个字符,可直接由两个字节表示出来。扩展字符面需要4个字节才能表示完全。

GB2312:中国的第一部编码,采用可变长方式编码,单字节兼容ASCII码,双字节用于便是汉子,只有6K余个字符。

GBK:GB2312的扩展,编码方式完全一样,只是将GB2312没有使用的代码用上了,达到2W余个字符。

GB10800:最新的国标编码,单字节表示ASCII码,双字节完全兼容GBK,实现了4字节编码,4字节编码部分兼容UNICODE扩展字符面。

BIG5:繁体字编码

JIS:日语编码

2,UNICODE当前有两种编码实现方式,一种为直接编码的UTF-16(BE/LE),其字节码数值直接对应相应的UNICODE码,不可变长,始终为2字节,字符集只囊括基本字符面。

3,UTF-8为可变长编码方式。单字节代表ASCII码。可以变为2,3,4字节长。使用该编码方式需要按照相应规则解码成相应的UNICODE码。



字体相关:

字体存储了每个字的显示参数。字体分编码方式,如假设GBK的0xA2 0xA3代表的是"三"这个字,但是UNICODE里面同一个码值代表的却可能是"部"这个字.所以每种字体都只可能对应一种编码,除非是兼容的







问题:

1,我指定控制台为美国的代码页(扩展ASCII),为何仍然能显示中文文件名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值