文件编码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 <EOL> of the current buffer, which is used for
        reading/writing the buffer from/to a file:
            dos     <CR> <NL>
            unix    <NL>
            mac     <CR>
        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 的代码页)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

  • 字符集和编码简介 在编程中常常可以见到各种字符集和编码,包括ASCII,MBCS,Unicode等字符集。确切的说...
    兰山小亭阅读 8,488评论 0 13
  • 大概每个人在使用软件时都遇到过乱码的问题,这是由于字符的编码和解码方式不一致导致,我们知道计算机只认识二进制数据,...
    楚客阅读 1,423评论 1 9
  • 线下调研目的 真实地记录用户的心理反应 邀约tips 便于落地,面对面的用户(考虑距离、地区问题、成本) 用自己的...
    guoshiyv阅读 771评论 0 1
  • 男追女隔层山,女追男隔层纱 闺蜜小C向来是敢爱敢恨,真性情,同时也是极其单纯的女汉子。 其实小C长得并不出众,小时...
    爱米粒吧阅读 329评论 1 0
  • 当我一个人说话,周围一群人在听的时候,我时常也觉得大家都在看我笑话,尤其是语言组织不起来的时候。不知道是不是上图的...
    foolnoone阅读 165评论 0 1