VIMがUTF-8コード値ではなくUnicodeコードポイントを表示するのはなぜですか?


7

私がPHPブログで見つけたこの想定されたコード行を考えてみてください。引用符に注意してください。

throw new Exception(“That's not a server name!”);

それらの引用は 正しい二重引用符 (Unicodeコードポイント: U+201D; UTF-8の16進エンコード値 0xE2 0x80 0x9D )押す g ある VIMでは、ステータスバーに次のように表示されます。

<”> 8221, Hex 201d, Octal 20035

UTF-8コード値ではなく、Unicodeコードポイントが表示されるのはなぜですか?

ファイルがUTF-8として保存されていることを考えると、 ターミナル バイトをグリフに変換すると、VIMはファイルの生の値(UTF-8コード値)を表示するので、Unicodeコードポイントに変換するのではないと思います。


1
TIL新しい#Vimコマンド。質問ありがとうございます。
Boldewyn

回答:


16

UTF-8コード値ではなく、Unicodeコードポイントが表示されるのはなぜですか?

使うから ga

<”> 8221, Hex 201d, Octal 20035

の代わりに g8

e2 80 9d

romainlありがとうございます。実際、私は読みました :h ga しかし読んでいない g8 それ以降のセクションから引用 :h ga カーソルの下にある文字のASCII値を印刷します。その文字が非標準のASCII文字の場合は、...印刷不能バージョンも表示されます。 「私は、その文書のテキストはUTF-8をサポートする前に書かれているかもしれないし、UnicodeコードポイントとUTF-8コード値の両方がコードポイントの同じ16進値&lt; 127であるため作成する必要はない当時の違いです。
dotancohen

13

Vimは テキストエディタ そしてテキストコードポイントで動作します、 ではない バイトファイルを開くとき、エディタはそれをバイトエンコーディングから内部表現(通常はUnicode)にデコードする必要があります。ファイルに保存し直すとき、または端末にその内容を表示するときは、テキストをバイトにエンコードし直す必要があります。

この理由の1つは単純です - ファイルと端末が使用している可能性があります。 違う 文字セットたとえば、ISO 8859-13またはKOI8-Rの古い文書を編集していて、それらがUTF-8端末に正しく表示されるようにしたいとします。

2つ目の理由は、やはりテキストエディタがテキストを扱うことです。例えば、 バイトエンコーディング(UTF-8では3バイト、Windows-1257では1バイト、Shift-JISでは2バイトなど)に関係なく、幅は1文字、幅は1セルです。 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“. │
└───────────────────────────┘     └───────────────────────────┘

言うまでもありません、あなたがする必要があります バックスペース 3回 単一の文字を削除します。


Grawity、ありがとうございます、あなたの最初の文が重要なポイントになります。
dotancohen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.