- `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+v 65
    • 输入ctrl+v 66
    • 输入ctrl+v 67
    • 输入ctrl+v 68
    • esc 退出
  • 屏幕上可以见到插入了 ABCD 四个字符
  • 这就是使用ascii具体编码来插入字符
  • 那我能用其他的进制
  • 比如八进制和十六进制来插入ascii字符么?
  • :h i_ctrl-v

用其他进制插入ascii字符

  • 使用八进制

    • 输入ctrl+v o117
    • 输入ctrl+v o101
    • 输入ctrl+v o105
    • 输入ctrl+v o123
    • 输入ctrl+v o131
  • 使用十六进制

    • 输入ctrl+v x41
  • 能否用这个方式插入中文么?
  • 先查一下

插入unicode字符

  • 输入ctrl+v u4e00

    • 可以看到插入了中文字符
    • 具体二进制是如何存储的呢?
  • :.!xxd

  • 为什么会是这样呢?

编码模式

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

    • 这个unicode编码是0x4e00
    • 存储的时候需要避免和ascii中的前127个字符混淆
    • 需要用utf-8的方式存储
    • 状态栏上也可以看出此文件的编码格式

  • 默认是utf-8

utf-8 编码格式

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

  • 所以

    • e4b880对应着
    • 0a 对应着 <LF>

      • 也就是linefeed

  • 完美对应上了
  • 除了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地址] (GitHub - overmind1980/oeasyvim: 这是oeasy制作的的一套关于vim的教程 可以在 https://www.lanqiao.cn/teacher/courses/2840 做实验 邀请码FJWYIMGB 本教程从0基础开始,到精通vim配置,和高级命令。希望能让vim是你的开发更高效。)

[Gitee地址] (overmind1980/oeasyvim)

[蓝桥实验楼 邀请码FJWYIMGB] (oeasy 教您零基础玩转编辑神器 vim_Linux - 蓝桥云课)

oeasy教您玩转vim - 79 - # 编码格式encoding的更多相关文章

  1. oeasy教您玩转vim - 56 - # 字符可视化模式

    ​ 可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...

  2. oeasy教您玩转vim - 57 - # 行可视化

    ​ 可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...

  3. oeasy教您玩转vim - 53 - # 批量替换

    查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...

  4. oeasy教您玩转linux010203显示logo

    我们来回顾一下 上一部分我们都讲了什么?

  5. oeasy 教您玩转linux010101查看内核uname

    linux([?l?n?ks]) 是什么????? 咱们这次讲点什么呢?这次咱们讲讲这个 linux([?l?n?ks]),什么是 linux([?l?n?ks])呢?这linux([?l?n?ks] ...

  6. oeasy教您玩转linux010202软件包管理apt

    顾一下 上一部分我们都讲了什么?

  7. oeasy教您玩转linux010201持续输出yes

    我们来回顾一下 上一部分我们都讲了什么?

  8. oeasy教您玩转linux010108到底哪个which

    到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?

  9. oeasy教您玩转python - 006 - # hello world

    ​ Hello World! 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 python3 里面全都是 cpu 指令 可以执行的那种指令 我们可以把指令对应的汇编找到 objdu ...

  10. oeasy教您玩转linux-010110内容回顾

    我们来回顾一下 我们都讲了什么?

随机推荐

  1. 鸿蒙HarmonyOS实战-Stage模型(开发卡片事件)

    一.开发卡片事件 HarmonyOS元服务卡片页面(Metaservice Card Page)是指在HarmonyOS系统中,用于展示元服务的页面界面.元服务是指一组提供特定功能或服务的组件,例如天 ...

  2. mit 6.824 lab1 思路贴

    前言 为遵守 mit 的约定,这个帖子不贴太多具体的代码,主要聊聊自己在码代码时的一些想法和遇到的问题. 这个实验需要我们去实现一个 map-reduce 的功能.实质上,这个实验分为两个大的板块,m ...

  3. CSS3 超实用属性:pointer-events (可穿透图层的鼠标事件)

    1.是什么 pointer-events 直译为指针事件,该属性指定在什么情况下某个DOM可以成为鼠标事件的 target. 简而言之,就是允许/禁止DOM的鼠标事件(click事件.hover事件. ...

  4. OpenCV笔记(9) calcHist绘制直方图

    直方图只是简单地将数据归入预定义的组,并在每个组内进行计数.也可以选择对数据提取特征,再对特征进行计数,这里的特征可以是梯度的长度.梯度的方向.颜色或其他任何可以反应数据特点的特征.也就是说,直方图是 ...

  5. OpenTelemetry agent 对 Spring Boot 应用的影响:一次 SPI 失效的案例

    背景 前段时间公司领导让我排查一个关于在 JDK21 环境中使用 Spring Boot 配合一个 JDK18 新增的一个 SPI(java.net.spi.InetAddressResolverPr ...

  6. Vue Router 4与路由管理实战

    title: Vue Router 4与路由管理实战 date: 2024/6/7 updated: 2024/6/7 excerpt: 这篇文章介绍了如何在Vue.js应用中利用Vue Router ...

  7. 剑指Offer-55.链表中环的入口结点(C++/Java)

    题目: 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 分析: 利用快慢指针,如果链表中存在环的话,则快指针一定在环中的某个节点与慢指针相遇. 设头节点到链表的环的入口结点 ...

  8. WPS WORD EXCEL 不合并显示

    WPS WORD EXCEL 不合并显示 版本:WPS 12 , 下载时间约是2023 年. 1.在开始菜单里找到 WPS OFFICE - 配置工具 2.点击"高级(A)". 3 ...

  9. oracle数据库文件

    oracle数据库重要的文件包括参数文件,控制文件,数据文件,临时文件,重做日志文件. 1 参数文件 oracle的参数文件可以设置数据库的名称,SGA和PGA的大小,控制文件的路径等系统参数.这些参 ...

  10. 简约博客新主题Sina上线 - 魔改新浪

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 简约博客新主题Sina上线 - 魔改新浪 日期:2018- ...