dot*_*hen 9 encoding vim unicode utf-8
考虑一下我在 PHP 博客中找到的这行假定的代码,注意引号:
throw new Exception(“That's not a server name!”);
Run Code Online (Sandbox Code Playgroud)
这些引号是正确的双引号(Unicode 代码点:U+201D;UTF-8 十六进制编码值:)0xE2 0x80 0x9D。ga在 VIM 中按在状态栏中显示以下内容:
<”> 8221, Hex 201d, Octal 20035
Run Code Online (Sandbox Code Playgroud)
?
为什么显示的是 Unicode 代码点而不是 UTF-8 代码值?
考虑到文件存储为 UTF-8 并且它是将字节转换为字形的终端,我希望 VIM 显示文件的原始值(UTF-8 代码值),而不是将其转换为 Unicode 代码点.
rom*_*inl 17
为什么显示的是 Unicode 代码点而不是 UTF-8 代码值?
因为你使用ga:
<”> 8221, Hex 201d, Octal 20035
Run Code Online (Sandbox Code Playgroud)
而不是g8:
e2 80 9d
Run Code Online (Sandbox Code Playgroud)
use*_*686 13
因为 Vim 是一个文本编辑器,可以处理文本代码点,而不是字节。不止一种翻译发生——当打开一个文件时,编辑器必须将它从字节编码解码为内部表示(通常是 Unicode);当保存回文件或在终端上显示其内容时,编辑器必须将文本编码回字节。
原因之一很简单——文件和终端可能使用不同的字符集。例如,您正在编辑 ISO 8859-13 或 KOI8-R 中的一些旧文档,并希望它们在 UTF-8 终端上正确显示。
第二个原因再次是文本编辑器处理文本。例如,”是一个字符,其宽度是一个终端单元格,无论其字节编码如何(UTF-8 中为 3 个字节,Windows-1257 中为 1 个字节,Shift-JIS 中为 2 个字节,等等)。如果 Vim 仅将其计为 3 个字节而终端将其显示为 1 个,则会导致垂直拆分未对齐、换行过早、制表符显得太窄等等。
Instead of this... ...you would see this.
????????????????????????????? ?????????????????????????????
?She said, "Hello." ? ?She said, "Hello." ?
? ? ? ?
?She said, “Hello.” ? ?She said, “Hello.” ?
? ? ? ?
?Ji pasak?, „Sveiki“. ? ?Ji pasak?, „Sveiki“. ?
????????????????????????????? ?????????????????????????????
Run Code Online (Sandbox Code Playgroud)
更不用说,您必须Backspace 三遍才能删除单个字符。
| 归档时间: |
|
| 查看次数: |
1997 次 |
| 最近记录: |