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?
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 keranalatin-1
boleh muncul dalam mana-mana gabungan jujukan binari, jika ia diletakkan dahulu, ia akan sentiasa dipaparkan sebagailatin-1
.编码A
:使用set fileencodings=ucs-bom,utf-8,gbk,cp936,latin-1
设置。vim 按照设置的顺序检查检测文件的编码。因为某些编码里不存在某些二进制序列的组合,所以如果检测到就认为不是这种编码,检查下一种编码,否则就认为是这一种。因为latin-1
可以出现任何二进制序列的组合,所以如果放到第一个,那么将永远以latin-1
显示。在一般的二进制文件里是不存在字符编码的标记的。但是Unicode里面有个特殊叫做零宽度空格(
FEFF
)而FFFE
是不存在的编码,所以在Unicode的标准里可以人为的在开始加入这个字符(这个字符在任何字体下都是没有宽度的,在中文字符里面没有任何的效果跟没有一样,是为了照顾东南亚某些语言的显示而设置的)。这样就便于文本编辑器检查字符和字节顺序,但是在代码里include
这种文件经常会出问题(这可是个大坑,编译器会认为这是一个非法字符,可是你又看不到)。
Tiada tanda pengekodan aksara dalam fail binari biasa. Walau bagaimanapun, terdapat aksara khas dalam Unicode yang dipanggil ruang lebar sifar (编码B
:set fileencoding=utf-8
FEFF
) danFFFE
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 sepertiinclude
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 pengekodanUTF8
ialahxE6x97A5. Adalah mustahil untuk anda mengatakan bahawa hasil pengekodan menggunakan
GB18030
masih merupakan aksara日
xE6x97A5
.日
在UTF8
编码中是xE6x97A5
,你就不可能说采用GB18030
编码结果还为xE6x97A5
的日
字。编辑器识别文本文件编码有不同的方式,有的文件编码带有
Terdapat cara berbeza untuk editor mengenal pasti pengekodan fail teks Sesetengah pengekodan fail mempunyai pengepalaMagic
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.