欢迎光临散文网 会员登陆 & 注册

oeasy教您玩转vim - 79 - # 编码格式encoding

2022-01-03 08:32 作者:oeasy  | 我要投稿

- `help encoding-name`![图片描述](https://s4.51cto.com/images/blog/202201/03083053_61d243bd7193583015.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)- 看起来就是unicode编码- 那其实我可以把当前文档保存为    - utf-8 `:set fileencoding=utf-8`    - gb2312 `:set fileencoding=gb2312`- 当然反过来- 我如果打开一个文件- 可以通过    - `:set encoding=utf-8`或者    - `:set encoding=gb2312`    - 来设置编码确保文件正常观看## 总结- 这次我们了解了编码格式    - 屏幕显示的encoding    - 文件保存的fileencoding- 不能搞乱了- 一般用什么编的就用什么解- 解铃还须系铃人- 打开不正确的话,就要切到正确的上面- 保存成任何自己想要的编码方式- vim还有什么能帮助我们快速操作的方法么?🤔- 下次再说!✋[Github地址] (https://github.com/overmind1980/oeasyvim)[Gitee地址] (https://gitee.com/overmind1980/oeasyvim)[蓝桥实验楼 邀请码FJWYIMGB] (https://www.lanqiao.cn/courses/2840)

文件格式 fileformat

回忆

  • 上次我们了解了文件格式

    • unix

    • dos

    • mac

  • 不同文件格式对应的换行符不同

    • 可以修改当前文件的文件格式

    • 也可以用二进制来观察

    • 不同文件格式下

    • 具体换行符的样子

  • 为什么'6f'就对应字母o?

    • 因为这是ascii基本的编码设定

    • 可中文字符又是如何编码的呢?🤔

插入ascii字符

  • 我们新建一个oeasy.txt

    • i进入插入模式

    • 输入ctrl+v65

    • 输入ctrl+v66

    • 输入ctrl+v67

    • 输入ctrl+v68

    • esc退出

  • 屏幕上可以见到插入了 ABCD 四个字符

  • 这就是使用ascii具体编码来插入字符

  • 那我能用其他的进制

  • 比如八进制和十六进制来插入ascii字符么?

  • :h i_ctrl-v

用其他进制插入ascii字符

  • 使用八进制

    • 输入ctrl+vo117

    • 输入ctrl+vo101

    • 输入ctrl+vo105

    • 输入ctrl+vo123

    • 输入ctrl+vo131

  • 使用十六进制

    • 输入ctrl+vx41

  • 能否用这个方式插入中文么?

  • 先查一下

插入unicode字符

  • 输入ctrl+vu4e00

    • 可以看到插入了中文字符

    • 具体二进制是如何存储的呢?

  • :.!xxd

  • 为什么会是这样呢?

编码模式

  • 那这个东西怎么具体存储和操作呢?

    • 这个unicode编码是0x4e00

    • 存储的时候需要避免和ascii中的前127个字符混淆

    • 需要用utf-8的方式存储

    • 状态栏上也可以看出此文件的编码格式

  • 默认是utf-8

utf-8 编码格式

  • 一(4E00) 属于第三行的范围

  • 所以

    • 也就是linefeed

    • e4b880对应着

    • 0a 对应着 <LF>

  • 完美对应上了

  • 除了utf-8之外还有别的编码格式么?

查看当前语言和编码

  • :language可以查看当前编码格式

修改编码

  • :set encoding=unicode

  • 设置之后再观察变化

  • 这个ucs-2就是utf-16

  • ucs-4就是utf-32

  • 上面的编码变成了4e00

  • 还有什么其他编码么?

其他编码

  • :set encoding=latin1

    • 修改之后,状态栏的中文不认识了

    • 屏幕的字符也变了模样

    • 其实他这是用latin1来解释e4b880

  • 这个是拉丁字符的编码

  • 我们再试试支持中文的

gb2312

  • :set encoding=gb2312

    • 换成中文gb2312

    • 文件存储形式没变

    • 解释方式变了

    • 我们也无法理解

  • :set encoding=utf-8

    • 改回来了

    • 我们又可以看到

  • :set encoding=gb2312

    • 又来

    • 硬要说他是gb2312的编码

  • 然后就保存

  • 以上都发生在内存里面

  • 保存到硬盘里面

  • 如何控制他的编码格式呢?

文件编码格式

  • fenc其实就是

    • fileencoding

    • fileencodingcoding 有什么不同呢?

  • encoding

    • 是在屏幕显示字符时的所用编码格式

    • 是读取内容并放入内存缓冲buffer中的编码

  • fileencoding 是保存文件时

    • 在硬盘上保存二进制文件的编码格式

    • 是硬盘上的编码

    • 我们用utf-8写下了

    • 内存中对应e4b880

  • :set encoding=gb2312

    • 这是在用gb2312编码格式解码utf-8编码的二进制序列

    • e4b880理解为涓~并显示在屏幕上

  • :set fileencoding=gb2312

    • 根据gb2312

    • 涓~在硬盘上写成e4b880

  • vi oeasy.txt

    • 根据utf-8

    • e4b880理解为并显示在屏幕上

  • 如果我就想写一个gb2312的到硬盘

  • 怎么办呢?

使用gb2312

  • :set encoding=gb2312

    • 之后在插入模式下输入一

  • :set fileencoding=gb2312

    • 注意状态栏的变化

  • 这是要在内存中和硬盘上都使用gb2312编码格式

  • :%!xxd

    • 这次内存中的d2bbgb2312格式下被理解为

  • :%!xxd -r

    • 恢复回来

  • :w! o2z.txt

    • 这次把用gb2312编码,也就是d2bb

    • 写到了硬盘里

打开文件

  • vi o2z.txt

  • 只能看到一个h

    • 好多不可见

    • 这是在用utf-8编码格式解释gb2312编码后的内容

  • 因为是用utf-8解码gb2312编码的文件

  • :%!xxd

    • 可以看到从硬盘读到缓存的内容为d2bb

  • %!xxd -r

    • 恢复回来

  • :set encoding=gb2312

    • 这次可以看到用gb2312解码d2bb

  • 那如果我们都用utf-8来编码呢?

utf-8编码

  • :set encoding=utf-8

  • :set fileencoding=utf-8

  • 这样都是utf-8编码的内容

  • 其实还可以设置在内存中unicode

  • 这样更省内存空间

  • 但如果我我想要把文件编码设置为ascii

  • 并保存会如何呢?

E513

  • 出现了错误E513

  • 因为ascii每个字节首位必须是0

  • 所以这个汉字无法保存

  • 所以这个时候如果把filecoding置成空会如何呢?

修改

  • :set fileencoding=

  • :set fileencoding?

  • :set encoding?

  • 这个时候encodingucs-2

  • 这是什么意思?

编码含义

  • help encoding-name

  • 看起来就是unicode编码

  • 那其实我可以把当前文档保存为

    • utf-8 :set fileencoding=utf-8

    • gb2312 :set fileencoding=gb2312

  • 当然反过来

  • 我如果打开一个文件

  • 可以通过

    • :set encoding=utf-8或者

    • :set encoding=gb2312

    • 来设置编码确保文件正常观看

总结

  • 这次我们了解了编码格式

    • 屏幕显示的encoding

    • 文件保存的fileencoding

  • 不能搞乱了

  • 一般用什么编的就用什么解

  • 解铃还须系铃人

  • 打开不正确的话,就要切到正确的上面

  • 保存成任何自己想要的编码方式

  • vim还有什么能帮助我们快速操作的方法么?🤔

  • 下次再说!✋

[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (https://gitee.com/overmind1980/oeasyvim)
[蓝桥实验楼 邀请码FJWYIMGB] (https://www.lanqiao.cn/courses/2840)


oeasy教您玩转vim - 79 - # 编码格式encoding的评论 (共 条)

分享到微博请遵守国家法律