zoukankan      html  css  js  c++  java
  • ubuntu下的“用vim打开中文乱码,用cat打开正常显示”的解决方法

    转载

    系统环境:ubuntu10.04 vim gvim完全安装

    问题:终端下vim中的汉字为乱码,网上搜索了一些解决方案。但是奇怪的是,这些方法都不能实现gvim的菜单和文中汉字,终端vim下的文中汉字同时正常显示。有一种方案应用后vim和gvim打开的文件中的汉字(中文)都能正常显示,但gvim的菜单汉字为乱码。对这些解决方案做了各种尝试后,找到如下方面实现同时汉字均能正常显示。

    打开终端

    [plain] view plaincopy
     
     
    1. $sudo -s  
    2. #vim /etc/vim/vimrc  


    在文件末尾添加如下代码:

    [plain] view plaincopy
     
     
    1. set fileencodings=gb2312,utf-8  
    2. set fileencoding=gb2312  
    3. set termencoding=utf-8  


    保存后退出。问题解决,但是出现乱码的具体原因是什么还没搞清楚。

    下面引用一些参考资料:

    http://doc.linuxpk.com/80308.html

    1、支持中文编码的基础

    Vim要更好地支持中文编码需要两个特性:+multi_byte和+iconv,可以用|:version|命令检查当前使用的Vim是否支持,否则的话需要重新编译。

    2、影响中文编码的设置项

    Vim中有几个选项会影响对多字节编码的支持:

    • encoding(enc):encoding是Vim的内部使用编码,encoding的设置会影响Vim内部的Buffer、消息文字等。在 Unix环境下,encoding的默认设置等于locale;Windows环境下会和当前代码页相同。在中文Windows环境下encoding的 默认设置是cp936(GBK)。
    • fileencodings(fenc):Vim在打开文件时会根据fileencodings选项来识别文件编码,fileencodings可以同时设置多个编码,Vim会根据设置的顺序来猜测所打开文件的编码。
    • fileencoding(fencs) :Vim在保存新建文件时会根据fileencoding的设置编码来保存。如果是打开已有文件,Vim会根据打开文件时所识别的编码来保存,除非在保存时重新设置fileencoding。
    • termencodings(tenc):在终端环境下使用Vim时,通过termencoding项来告诉Vim终端所使用的编码。

    3、Vim中的编码转换

    Vim内部使用iconv库进行编码转换,如果这几个选项所设置的编码不一致,Vim就有可能会转换编码。打开已有文件时会从文件编码转换到 encoding所设置的编码;保存文件时会从encoding设置的编码转换到fileencoding对应的编码。经常会看到Vim提示[已转换],这是表明Vim内部作了编码转换。终端环境下使用Vim,会从termencoding设置的编码转换到encoding设置的编码。

    可以用|:help encoding-values|列出Vim支持的所有编码。

    4、具体应用环境的设置

    • 只编辑GBK编码的文件

    set fileencodings=cp936
    set fileencoding=cp936
    set encoding=cp936

    • 只编辑UTF-8编码的中文文件

    set fileencodings=utf-8
    set fileencoding=utf-8
    set encoding=cp936 或者 set encoding=utf-8

    • 同时支持GBK和UTF-8编码

    set fileencodings=ucs-bom,utf-8,cp936
    set fileencoding=utf-8
    set encoding=cp936 或者 set encoding=utf-8

    • 如果在终端环境下使用Vim,需要设置termencoding和终端所使用的编码一致。例如:

    set termencoding=cp936 或者 set termencoding=utf-8

    Windows记事本编辑UTF-8编码文件时会在文件头上加上三个字节的BOM:EFBBBF。如果fileencodings中设 置ucs-bom的目的就是为了能够兼容用记事本编辑的文件,不需要的话可以去掉。Vim在保存UTF-8编码的文件时会去掉BOM。去掉BOM的最大好 处是在Unix下能够使用cat a b>c来正确合并文件,这点经常被忽略。

    5、FAQ

      1. 为什么在Vim中一次只能删除半个汉字?

        因为encoding设置错误,把encoding设置为cp936就可以解决此问题。在Unix环境下Vim会根据locale来设置默认的encoding,如果没有正确设置locale并且没有设置encoding就会一次只能删除半个汉字。

      2. VIM为什么不能输入繁体字?

        把euc-cn或者GB2312改为cp936就可以了。euc-cn是GB2312的别名,不支持繁体汉字。cp936是GBK的别名,是GB2312的超集,可以支持繁体汉字。

      3. VIM为什么提示不能转换?

        因为在编译Vim时没有加入iconv选项,重新编译Vim才能解决。

      4. 如何打开一个GBK编码的文件并另存为UTf-8编码?

        保存文件时运行命令|:set fileencoding=utf-8|就可以了。

  • 相关阅读:
    Bootstrap(9) 巨幕页头缩略图和警告框组件
    Java使用点滴
    Bootstrap(8) 路径分页标签和徽章组件
    视频会议系统MCU服务器视频传输处理模式
    honeywell1900扫描枪的使用说明
    WebDev.WebServer20.exe应用程序错误
    UEFI引导过程及windows引导修复
    低分辨率的显示器模拟高分辨率显示模式
    IIS应用程序池权限与虚拟目录身份验证权限
    ADO.Net操作数据库的方式
  • 原文地址:https://www.cnblogs.com/heben/p/7804794.html
Copyright © 2011-2022 走看看