文件编码encoding,文件格式fileformat

这个问题多数是出现在Linux服务器上修改dos上传的文件

本人问题场景描述,因为是做服务器管理了,Linux与Mac和Windows各种兼容都要处理,一次在处理请求跨域问题的时候,直接更改文件代码,导致连函数都找不到了,但是这个函数是存在的,那么这个时候,可以用查看文件编码和文件签名编码的命令去查看到底是否是文件编码引起问题;

:set fileencoding(文件编码)
:set fileformat(所属文件格式签名编码) 
[上述两个命令不理解都可以在vim可视模式下使用(:help fileencoding  :help filefomat)去查看]

直接使用iconv命令转码:iconv -f gb2312 -t utf8 filename -o new fileName

-f --from-code=名称  原始文本编码
-t --to-code=输出编码
-o --output=FILE 输出文件

如下是Linux中两个help命令的解析

 *'fileencoding'* *'fenc'* *E213*
'fileencoding' 'fenc'   string (default: "")
                        local to buffer
                        {only available when compiled with the |+multi_byte|
                        feature}
                        {not in Vi}
        Sets the character encoding for the file of this buffer.

        When 'fileencoding' is different from 'encoding', conversion will be
        done when writing the file.  For reading see below.
        When 'fileencoding' is empty, the same value as 'encoding' will be
        used (no conversion when reading or writing a file).
        Conversion will also be done when 'encoding' and 'fileencoding' are
        both a Unicode encoding and 'fileencoding' is not utf-8.  That's
        because internally Unicode is always stored as utf-8.
                WARNING: Conversion can cause loss of information!  When
                'encoding' is "utf-8" or another Unicode encoding, conversion
                is most likely done in a way that the reverse conversion
                results in the same text.  When 'encoding' is not "utf-8" some
                characters may be lost!

        See 'encoding' for the possible values.  Additionally, values may be

fileEncoding字符串(默认:“”)
局部缓冲
{只有当编译与| + multi_byte |
特征}
{不在vi }
设置此缓冲区文件的字符编码。
当fileEncoding”不同于“编码”,转换将
写入文件时完成。阅读见下文。当fileEncoding”是空的,如编码相同的值将
使用(读或写文件时没有转换)。
转换也将进行“编码”和“fileEncoding”
一个Unicode编码和fileEncoding不是UTF-8。那是
因为内部Unicode始终存储为UTF-8。
警告:转换可能导致信息丢失!什么时候
编码是UTF-8或Unicode编码,转换
很可能是以反向转换的方式完成的。
同一文本中的结果。当“编码”不是“UTF-8”一些
字符可能丢失!
查看可能值的“编码”。此外,值可能是

*'fileformat'* *'ff'*
'fileformat' 'ff'       string (MS-DOS, MS-Windows, OS/2 default: "dos",
                                Unix default: "unix",
                                Macintosh default: "mac")
                        local to buffer
                        {not in Vi}
        This gives the  of the current buffer, which is used for
        reading/writing the buffer from/to a file:
            dos      
            unix    
            mac     
        When "dos" is used, CTRL-Z at the end of a file is ignored.
        See |file-formats| and |file-read|.
        For the character encoding of the file see 'fileencoding'.
        When 'binary' is set, the value of 'fileformat' is ignored, file I/O
        works like it was set to "unix".
        This option is set automatically when starting to edit a file and
        'fileformats' is not empty and 'binary' is off.
        When this option is set, after starting to edit a file, the 'modified'
        option is set, because the file would be different when written.
        This option can not be changed when 'modifiable' is off.
        For backwards compatibility: When this option is set to "dos",

string (MS-DOS, MS-Windows, OS/2 default: "dos",
UNIX默认值:“UNIX”,
麦金塔默认值:“Mac”
local to buffer
{不在vi }
这给当前的缓冲区< EOL >,这是用于
从文件中读取/写入缓冲区:
DOS < < > > >
UNIX >
mac < > >
当“DOS”的使用,在文件的末尾使用被忽略。
See |file-formats| and |file-read|.
For the character encoding of the file see 'fileencoding'.
当“二进制”设置,“格式”被忽略的价值,文件I/O
类似于“UNIX”的工作。
此选项在开始编辑文件时自动设置。
“文件格式”不空“二进制”了。
设置此选项后,在开始编辑文件时,“修改”
选项设置,因为文件在写入时会有所不同。
当“可修改”关闭时,此选项不能更改。
对于向后兼容性:当此选项设置为“DOS”时,

  • 解决思路,就是用上面的两个命令设置成你所需要的编码格式就可以了

也可以对vimrc配置文件做优化来解决以上问题

set fileencodings=utf-8,chinese,latin-1
set termencoding=utf-8
set encoding=utf-8

另外补充一点关于文件编码的单词(用作对上文的论述)
encoding、fileencoding、fileencodings、termencoding,它们的意义如下:

  • encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等;
  • fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此);
  • fileencodings: Vim 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将 Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面;()

注意顺序是不能错的。ucs-bom必须要设置为第一个,utf-8必须是第二个,latin1必须是最后一个。为什么这样设置可以看VIM文档:
:help fencs

  • termencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。
    由于 Unicode 能够包含几乎所有的语言的字符,而且 Unicode 的 UTF-8 编码方式又是非常具有性价比的编码方式 (空间消耗比 UCS-2 小),因此建议 encoding 的值设置为 utf-8。这么做的另一个理由是 encoding 设置为 utf-8 时,Vim 自动探测文件的编码方式会更准确 (或许这个理由才是主要的 ;)。我们在中文 Windows 里编辑的文件,为了兼顾与其他软件的兼容性,文件编码还是设置为 GB2312/GBK 比较合适,因此 fileencoding 建议设置为 chinese (chinese 是个别名,在 Unix 里表示 gb2312,在 Windows 里表示 cp936,也就是 GBK 的代码页)。

你可能感兴趣的:(文件编码encoding,文件格式fileformat)