macos - Apakah mekanisme pengekodan fail?
怪我咯
怪我咯 2017-05-16 16:37:24
0
2
744

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

Kemudian saya menggunakan ultraedit untuk menyimpan f.txt sebagai fail berikut:

  1. fail f1.txt

    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.

  2. fail f2.txt

    Kandungan tersimpan sebenar ialah "xE6x97A5", yang ditafsirkan sebagai utf-8, kemudian ia dipaparkan sebagai "日"

  3. fail f3.txt

    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.

Di sini timbul persoalan,

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?

怪我咯
怪我咯

走同样的路,发现不同的人生

membalas semua(2)
迷茫

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.

Pengekodan A: Gunakan 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设置。vim 按照设置的顺序检查检测文件的编码。因为某些编码里不存在某些二进制序列的组合,所以如果检测到就认为不是这种编码,检查下一种编码,否则就认为是这一种。因为latin-1可以出现任何二进制序列的组合,所以如果放到第一个,那么将永远以latin-1显示。

在一般的二进制文件里是不存在字符编码的标记的。但是Unicode里面有个特殊叫做零宽度空格(FEFF)而FFFE是不存在的编码,所以在Unicode的标准里可以人为的在开始加入这个字符(这个字符在任何字体下都是没有宽度的,在中文字符里面没有任何的效果跟没有一样,是为了照顾东南亚某些语言的显示而设置的)。这样就便于文本编辑器检查字符和字节顺序,但是在代码里include这种文件经常会出问题(这可是个大坑,编译器会认为这是一个非法字符,可是你又看不到)。

编码Bset fileencoding=utf-8

Tiada tanda pengekodan aksara dalam fail binari biasa. Walau bagaimanapun, terdapat aksara khas dalam Unicode yang dipanggil ruang lebar sifar (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).

Pengekodan B: 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? 🎜
Ty80

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编码结果还为xE6x97A5字。

编辑器识别文本文件编码有不同的方式,有的文件编码带有Magic

Terdapat cara berbeza untuk editor mengenal pasti pengekodan fail teks Sesetengah pengekodan fail mempunyai pengepala 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. 🎜
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan