• Vim文本编码之坑


    #10月10日更新#

    今天在windows下用visual studio打开多个fortran文件,均出现了之前提到的“Some  bytes have been replaced with...”错误,这就比较尴尬了。最终发现,是因为将windows系统的默认编码设置成了UTF-8的原因。最后改回原来的默认设置,把那个“支持UTF-8编码(beta)”选项关闭之后,就没有出现乱码了。

    #10月9日更新#

    今天在Linux 上用vim 打开一个文件,vim将其识别成gb18030编码,能正常显示中文,然后进行了修改,保存。之后在windows上用visual studio  打开,提示了之前提到的“Some  bytes have been replaced with...”错误,中文无法解决。

    解铃还须系铃人,最后是在vim中打开这个文件,set fileencoding=utf-8,将文件的编码格式设置成UTF-8,然后保存。之后再在windows上用visual studio打开,就正常了!

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    工作原因,需要在windows和linux上同时对代码进行编辑。有时候会出现一个诡异的现象,在linux的vim显示正常的文件,在windows系统中用visual studio打开时提示

    File Load  
    
    Some bytes have been replaced with the Unicode substitution character while loading file xxx.f90 with Chinese Simplified (GB2312) encoding. Saving the file will not preserve the original file contents.
    

    打开的文件出现的是一堆乱码。 这究竟是怎么造成的?

    从字面上看,是这个文件原本是用GB2312进行编码的,但是文件中的一部分是用Unicode编码的。

    问题就在于windows和Linux 下的vim之间的默认的文本编码的差异。

    在Windows里,默认保存的文件,中文的编码格式是GBK编码(cp936)

    而在Linux系统中,当用vim打开windows保存的文本文件时,会先尝试用默认的编码格式(UTF-8)去转换,如果出现转换错误,再尝试用vim配置文件中列出的其它编码格式读取。

    这个vim配置文件是vimrc,一般位于/usr/share/vim/vimrc。在这个配置文件中,通过设置fileencodings 的值,来告诉vim编辑器依次尝试用这些编码格式打开文件。

    设想出现如下的情况,

    比如在windows下创建一个文本文件,以windows默认的格式(cp936)保存。但是,在linux系统中用vi打开这个文件时,由于某种原因,将其错误地识别成了UTF-8编码。这时候再对文件进行改动,改动部分就会以UTF-8的编码格式写入。之后再在windows下打开这个文件,就会出现乱码的错误。

    另外,如果用vim打开文件时提示:"xxxx.txt" [第 xx 行无效字符][dos] xxxxL, xxxxC  ,则意味着出现了转换错误。

    造成转换错误意味着文件的文本编码不正确。这里的“文本编码不正确”并不一定意味着所有的编码不正确,因为可能出现一个文件用两种编码保存的情况(可能在文件的这一行用的UTF-8对文本进行编码,在这个文件的下一行用GBK编码文本)。可能用vim打开文件时候,一部分文本能正常显示——这部分文本的编码和vim当前的编码一致,但另一部分文本不能正常显示,这时候尝试切换使用不同格式的编码打开文件,有可能使得这部分文本正常显示(原来能正常显示的文本可能因为切换了编码不能正常显示)。

    比如以gbk编码打开文件

    vi coding_test.f90 -c "e ++enc=gbk"

    在vi中查看文件的编码

    set fileencoding

    关于中文编码

    常见的中文编码有GB2312, GBK, GB13030等。这些带GB*前缀的,是中国定的。其中GB2312历史最早,1980年,支持的汉字字符也最少;GBK 1.0版本是1995年推出的;到了2000年GB18030推出,这一版本除了汉字外,还加入藏、蒙、维等字体

    而国际上采用的是UTF编码也支持中文,但是windows下还是默认用的GBK编码。

    参考

    常见字符编码扫盲(UTF,Unicode, GB2312) - 四-儿 - 博客园 https://www.cnblogs.com/sier/archive/2011/10/02/5676457.html

    在Vim中查看文件编码 - 浮沉一梦 - 博客园 https://www.cnblogs.com/jjzd/p/7380487.html

    Vim 编辑器底端 [noeol], [dos] 的含义_王佳伟的博客-CSDN博客 https://blog.csdn.net/strongwangjiawei/article/details/8236703

  • 相关阅读:
    MVC架构引入smarty视图引擎
    视图引擎smarty之插件
    视图引擎smarty 三
    视图引擎smarty 二
    视图引擎smarty 一
    .Net 框架
    onkeyup="this.value=this.value.replace(/D/g,'')
    cookie
    click
    html页面内容替换
  • 原文地址:https://www.cnblogs.com/jiangleads/p/13779711.html
Copyright © 2020-2023  润新知