关注和分享VPS主机优惠活动
www.vpsmr.com
        找回密码
腾讯云双11优惠活动

详细解释VIM中的文件编码处理和重新打开乱码文件


Warning: mysqli_query(): (HY000/1030): Got error 28 from storage engine in /www/wwwroot/vpsmr.com/wp-includes/class-wpdb.php on line 2349

前言

vim中有两个编码相关变量。如果你理解它们,你就不会对编码感到头疼了。

  • 编码:VIM内部编码,如缓冲区、寄存器、文本等。该值通常不由用户设置。此外,在打开vim设置该值是没有意义的。您可以将该值视为VIM程序本身的变量。如果您在工作中遇到文件编码问题;这个变量是完全不相关的。
  • 文件编码:顾名思义,它是文件的编码。

此外,还有一个名为文件编码的值,这是一个复数。通常,我们vimrc中设置这个值。当VIM打开一个文件时,它将根据文件编码中设置的顺序猜测文件代码。例如:

设置文件编码=ucs bom、utf-8、cp936、gb18030、big5、euc jpeuc kr、拉丁文1

所以有时候维姆猜错了。如果打开的文件显示乱码怎么办?(注:通常,当VIM打开一个文件时,代码是乱码,因为您的文件编码中没有写入代码,所以VIM无法正确猜测。例如,从上述设置中删除GB18030,当您使用此代码打开文件时,您会发现fileencoding的值是Latin1,文件的显示是乱码。)

此时,您可能希望设置fileencoding的值,但此时,我们的文件已打开。设置后,您会发现vim缓冲区的状态已更改为“已编辑”。文件仍然显示乱码,没有变化。具体原因将在后面详细解释。

正确的方法是用特定的编码重新打开文件。例如,在VIM:e++enc=GB2312中使用重新打开命令,++enc是指定要使用的编码的选项。打开后,您会发现VIM以您指定的形式打开了文件,但该文件已成为只读。如果要修改它,请将其设置为noreadonly。

事实上,这个原则有点像Python中的某个人提出的;三明治模型:

Python从流中获取字节(例如网络、文件I/O),并通过decode()将它们转换为STR。VIM读取文件时,会将其转换为内部文件;根据文件编码(由用户设置或通过文件编码猜测)进行编码。

当Python编写文件时,它使用encode()将其更改为字节,然后写入。当VIM从缓冲区写入文件时,它还将数据从内部编码转换为文件编码,然后写入。

这就解释了为什么在VIM中修改文件编码是无用的,以防出现乱码。

因为在打开文件后设置fileencoding的值不会改变已经加载到VIM缓冲区的数据。此时,数据已被转换。此设置只会在写入时更改当前的文件编码,因此可以总结为“一种编码用于打开文件,另一种编码用于写入文件;。

对乱码的正确要求应该是:我想以特定的编码形式打开这个文件。

总结

以上是本文的全部内容。希望本文的内容对您的学习或工作有一定的参考价值。如果你有任何问题,可以留言。谢谢你对国外VPS主机测评支持

参考资料:

  • 帮助:编辑
  • 帮助文件编码
  • help++enc
  • VIM文件编码识别和乱码处理

以上是本文关于 详细解释VIM中的文件编码处理和重新打开乱码文件 的全部内容,希望本文的内容对您的学习或工作有一定的参考价值,转载注明: https://www.vpsmr.com/1648.html

未经允许不得转载:国外VPS主机测评 » 详细解释VIM中的文件编码处理和重新打开乱码文件
任何商家都有倒闭和跑路可能,本站仅分享优惠活动及信息,购买前请自行斟酌,衡量评估风险,自负责任。数据勤备份是最佳选择!友情提示

评论 抢沙发

评论前必须登录!