Sebagai contoh, saya mempunyai fail f.txt pada mac saya Sistem ini dikodkan dalam utf-8
Terdapat data "xE6x97A5" di dalamnya - aksara Cina "日" dalam pengekodan utf-8
Kandungan sebenar yang disimpan ialah "xE6x97A5". Jika ultraedit mentafsirkannya sebagai pengekodan gb18030, ia akan dipaparkan sebagai aksara bercelaru pada antara muka ultraedit. Selepas itu, ia disimpan sebagai fail berkod gb18030, tetapi apabila dibuka pada sistem Mac, ia adalah UTF-8 dan paparannya adalah normal.
Kandungan tersimpan sebenar ialah "xE6x97A5", yang ditafsirkan sebagai utf-8, kemudian ia dipaparkan sebagai "日"
Simpan terus sebagai pengekodan gb18030, kemudian ultraedit akan menukar pengekodan secara automatik, iaitu menukar "xE6x97A5" kepada "xC8xD5". Kemudian vim membuka fail dan memanggil tafsiran pengekodan ascii.
Memandangkan data yang disimpan sebenar ialah "xE6x97A5", mengapa editor saya mentafsirkannya sebagai pengekodan utf-8? Apakah yang perlu saya lakukan sekiranya saya ingin mendapatkan penjelasan kod yang bercelaru oleh GBK?
Adakah ia menambahkan beberapa jenis teg pada pengepala binari dokumen. Jika ya, bagaimana untuk melihat teg ini?
Adakah analisis semantik berasaskan pengekodan dilakukan di bahagian editor?
走同樣的路,發(fā)現(xiàn)不同的人生
Ambil vim sebagai contoh
Fail teks, vim membukanya mengikut pengekodan A tertentu apabila membukanya, menukarnya kepada pengekodan B tertentu, dan kemudian menukarnya kepada pengekodan C yang lain apabila menyimpan penyunting teks yang lain mungkin tidak ada penyiapan automatik sebagai vim .
Pengekodan B: Ia tidak mempunyai kesan pada keseluruhan fail, tetapi berkaitan dengan paparan Ia adalah pengekodan yang digunakan apabila vim berinteraksi dengan sistem pengendalian.
set fileencodings=ucs-bom,utf-8,gbk,cp936,latin-1
untuk menetapkan. vim menyemak pengekodan fail pengesanan dalam set pesanan. Oleh kerana gabungan jujukan binari tertentu tidak wujud dalam sesetengah pengekodan, jika ia dikesan, ia dianggap bukan pengekodan ini, dan pengekodan seterusnya disemak, jika tidak, ia dianggap sebagai pengekodan ini. Oleh kerana latin-1
boleh muncul dalam mana-mana gabungan jujukan binari, jika ia diletakkan dahulu, ia akan sentiasa dipaparkan sebagai latin-1
. 編碼A
:使用 set fileencodings=ucs-bom,utf-8,gbk,cp936,latin-1
設(shè)置。vim 按照設(shè)置的順序檢查檢測文件的編碼。因為某些編碼里不存在某些二進(jìn)制序列的組合,所以如果檢測到就認(rèn)為不是這種編碼,檢查下一種編碼,否則就認(rèn)為是這一種。因為latin-1
可以出現(xiàn)任何二進(jìn)制序列的組合,所以如果放到第一個,那么將永遠(yuǎn)以latin-1
顯示。
在一般的二進(jìn)制文件里是不存在字符編碼的標(biāo)記的。但是Unicode里面有個特殊叫做零寬度空格(FEFF
)而FFFE
是不存在的編碼,所以在Unicode的標(biāo)準(zhǔn)里可以人為的在開始加入這個字符(這個字符在任何字體下都是沒有寬度的,在中文字符里面沒有任何的效果跟沒有一樣,是為了照顧東南亞某些語言的顯示而設(shè)置的)。這樣就便于文本編輯器檢查字符和字節(jié)順序,但是在代碼里include
這種文件經(jīng)常會出問題(這可是個大坑,編譯器會認(rèn)為這是一個非法字符,可是你又看不到)。
編碼B
:set fileencoding=utf-8
FEFF
) dan FFFE
ialah pengekodan yang tidak wujud, jadi aksara ini boleh ditambah secara buatan pada permulaan dalam standard Unicode ( Aksara ini tidak mempunyai lebar dalam mana-mana fon, dan tidak mempunyai kesan pada aksara Cina. Ia ditetapkan untuk menjaga paparan beberapa bahasa di Asia Tenggara). Ini memudahkan penyunting teks menyemak aksara dan susunan bait, tetapi fail seperti include
selalunya menyebabkan masalah dalam kod (ini adalah perangkap yang besar, pengkompil akan menganggap ini watak yang tidak sah, tetapi Anda tidak dapat melihatnya).
set fileencoding=utf-8
, pengekodan yang digunakan semasa menyimpan, ditukar secara automatik kepada pengekodan lain apabila menyimpan. Tetapi jika pengekodan yang salah dikenali apabila anda mula-mula membukanya, aksara yang tidak wujud tidak akan ditukar sepenuhnya apabila anda menukarnya. Jadi f1.txt yang disimpan sebagai gp18030 mungkin tidak melakukan penukaran pengekodan. ?? ??"Persoalannya, saya ingin mendapatkan data yang disimpan sebenar ialah "xE6x97A5", tetapi gunakan pengekodan gb18030 untuk menerangkan, bagaimana untuk melakukannya? ??
Pengekodan fail ialah spesifikasi kod sebenar tentang cara menyimpannya Pertama sekali, untuk menjawab soalan anda, 日
dalam pengekodan UTF8
ialah xE6x97A5. Adalah mustahil untuk anda mengatakan bahawa hasil pengekodan menggunakan
GB18030
masih merupakan aksara 日
xE6x97A5
. 日
在UTF8
編碼中是xE6x97A5
,你就不可能說采用GB18030
編碼結(jié)果還為xE6x97A5
的日
字。
編輯器識別文本文件編碼有不同的方式,有的文件編碼帶有Magic
Magic
, yang boleh dilengkapkan dengan mengenal pasti secara langsung beberapa bait pertama Walau bagaimanapun, kebanyakan fail teks tidak mempunyai The kod pengenalan diteka sepenuhnya oleh editor berdasarkan konteks dan tempat pengguna. ??