簡體   English   中英

什么'^ @'在vim中意味着什么?

[英]What does '^@' mean in vim?

當我在bash中捕獲文件時,我得到以下內容:

$ cat /tmp/file 
microsoft

當我在vim中查看同一個文件時,我得到以下內容:

^@m^@i^@c^@r^@o^@s^@o^@f^@t^@

如何識別和刪除這些“不可打印”的字符。 什么'^ @'在vim中意味着什么?

(只是一個背景信息:該文件是由base 64解碼並從Microsoft Playready的mpd文件的pssh頭切割而創建的)

你看到的是Vim對不可打印角色的直觀表現。 它解釋為:help 'isprint'

 Non-printable characters are displayed with two characters: 0 - 31 "^@" - "^_" 32 - 126 always single characters 127 "^?" 128 - 159 "~@" - "~_" 160 - 254 "| " - "|~" 255 "~?" 

因此, ^@代表空字節 = 0x00。 這些(和其他不可打印的字符)可以來自各種來源,但在你的情況下它是......

編碼問題

如果你在Vim中清楚地觀察你的輸出,那么每個第二個字節都是一個空字節 ; 中間是預期的字符。 這清楚地表明該文件使用多字節編碼utf-16 ,big endian,沒有精確的字節順序標記),並且Vim沒有正確檢測到它,而是將文件打開為latin1左右(而事情有效)在終端正確地出去)。

要解決此問題,您可以顯式指定編碼:

:edit ++enc=utf-16 /tmp/file

或者調整'fileencodings'選項,以便Vim可以自動檢測到這一點。 但是,請注意,模糊(如在您的情況下)使這容易失敗:

對於空文件或僅包含ASCII字符的文件,大多數編碼都可以使用,並且將使用'fileencodings'的第一個條目(“ucs-bom”除外,這需要BOM存在)。

這就是為什么建議16位編碼使用字節順序標記 (BOM); 但這假設您可以控制輸出編碼。

^@是Vim表示空字節。 ^表示不可打印的控制字符,下面的ASCII字符表示它是哪個控制字符。

^@ == 0 (NUL)
^A == 1
^B == 2
...
^H == 8
^K == 11
...
^Z == 26
^[ == 27
^\ == 28
^] == 29
^^ == 30
^_ == 31
^? == 127

9和10不會被轉義,因為它們分別是制表符和換行符。

32到126是可打印的ASCII字符(以Space開頭)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM