sublime 和 vs编码格式问题的解决

sublime 和 vs编码格式问题的解决

编码格式的本质是:使用二进制码标识非英文字符的方式,即协议。如UTF-8编码用1到6个字节编码Unicode字符。用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文),是一种万国码。其中,英文字符用1个字节,中文字符用三个字节。又如GB-2312,该编码方式约定每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”)。
故编码格式即是二进制串到可见字符直接的映射方式。如,‘你好,world’,字面上所见都是这几个字符,分别使用UTF-8和GB-2312映射到这串可见字符而分别对应的二进制串是不一样的。
问题是vs的默认编码是GB-2312,但sublime不支持GB-2312、gbk等编码格式。

根据这一原理分析:
  • 设置编码:使用UTF-8格式的文件键入‘你好,world’后,使用sublime的reopen 或set with encodeing时,该文件中记录的二进制串并没有发生变化,改变的只是将该二进制串解析为可见字符串的方式,即编码方式。所以,直接改变编码方式会发现乱码。此外,进行强制编码方式转换时,不同的编码方式对于行结束符等的不一致,会在原先的二进制串中加入新的二进制码,实现编码方式的强转。
  • 转编码:使用Notepad转编码时,会保持可见字符‘你好,world’不变,按照指定的编码方式重新编码可见字符‘你好,world’为对应的二进制串。
  • 拷贝过程:拷贝过程是操作系统完成的,可以将GB-2312格式文件中的中文文字,拷贝到UTF-8格式文件中,且不会发生乱码。因为对用户而言,用户需要拷贝的是可见内容而不是二进串,所以操作系统会根据目的文件编码格式,将拷贝的可见内容映射到对应编码格式的二进制串,然后赋值到目标文件中(此部分为臆测)。
  • 打开文件:无论使用vs,Notepad或sublime打开对应文件时编辑器会分析获取到文件的编码格式,然后按照这个编码格式打开文件。当编辑器不支持该编码格式时会按照相似的编码格式开发文件,比如vs编辑一个GB-2312的文件,使用sublime打开时,sublime会用windows1252格式打开文件,这样就会出现乱码。
  • 重新加载文件和关闭文件重新打开的区别:重新加载文件是文件在其他地方发生了改动,二进制串已经发生变化,然后按照原编码方式重新把二进制串解释为可见字符。当该文件是在其他地方被转化编码方式后,此时强行重新加载文件(即依然按照之前的编码方式显示文件)就会有乱码产生。关闭文件重新打开时,编辑器会自动分析获取到文件的编码格式,然后按照新的编码格式重新打开文件。
根据分析结论得出解决方案

方案1:
sublime端使用插件convertToUTF8,且设置”convert_on_load” : true,”convert_on_save” : false。从而加载文件的时候自动将GB-2312等sublime不支持的格式转为UTF8,若修改文件内容后保存,则按照UTF8编码格式对应的二进制串保存在文件里了。若该文件在vs也被打开了,此时打开vs会提示是否重新加载该文件,点击确定。由于该文件在vs被打开是GB-2312格式,如今重新加载以后会提示该文件已经无法被GB-2312格式解析了等类似的提示语言。解决方法是以不保存的形式关闭文件,之后重新打开,重新打开的时候vs会自动分析获取到文件的编码格式,然后以新的编码格式UTF8重新解释二进制串进行显示,这样就不会有乱码出现了。
方案2:
sublime端使用插件convertToUTF8,且设置”convert_on_load” : true,”convert_on_save” : true。显示GB-2312时,插件将文件转编码为UTF8,sublime能够显示,保存的时候再将文件格式还原到GB-2312格式后再保存。需要转变编码时使用工具Notepad的转编码功能将编码格式由GB2312转为UTF8,然后sublime和vs将对应的文件以不保存的形式关闭后重新打开就能正常显示了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值