Saya hanya menggunakan set karakter 128 yang didefinisikan dalam standar ANSI asli.
Tetapi secara keseluruhan, bagaimana file-file tersebut diimplementasikan secara berbeda.
Saya tidak peduli dengan tampilan, yaitu jika tab ditampilkan dengan 6 atau 8 karakter tetapi representasi internal yang sebenarnya dalam memori
Satu perbedaan yang saya dengar adalah penggunaan \ r \ n (Windows) vs. \ n untuk penghentian baris (Linux).
Jawaban:
"Unicode" pada Windows adalah UTF-16LE, dan setiap karakter berukuran 2 atau 4 byte. Linux menggunakan UTF-8, dan setiap karakter adalah antara 1 dan 4 byte.
"Minimum absolut setiap pengembang perangkat lunak mutlak, pasti harus tahu tentang Unicode dan set karakter (tanpa alasan!)"
sumber
Jeda baris
Windows menggunakan ujung garis CRLF (
\r\n
,0D 0A
) sementara Unix hanya menggunakan LF (\n
,0A
).Pengkodean Karakter
Paling modern (yaitu, sejak 2004 atau lebih) Sistem seperti Unix menjadikan UTF-8 sebagai pengkodean karakter default.
Windows, bagaimanapun, tidak memiliki dukungan asli untuk UTF-8. Ini secara internal bekerja di UTF-16, dan mengasumsikan bahwa
char
string berbasis-berada di halaman kode warisan . Untungnya, Notepad mampu membaca file UTF-8; sayangnya, pengkodean "ANSI" masih merupakan default.Karakter Khusus Bermasalah
U + 001A PENGGANTI
Windows (jarang) menggunakan Ctrl+ Zsebagai karakter akhir file. Misalnya, jika Anda
type
file pada prompt perintah, itu akan dipotong pada1A
byte pertama .Di Unix, Ctrl+ Ztidak ada yang istimewa.
U + FEFF NOL TANPA RUANG BREAK (Tanda Byte-Order)
Pada Windows, file UTF-8 sering mulai dengan "tanda urutan byte"
EF BB BF
untuk membedakannya dari file ANSI.Di Linux, BOM tidak disarankan karena merusak hal-hal seperti baris shebang di skrip shell. Plus, tidak ada gunanya memiliki tanda tangan UTF-8 ketika UTF-8 adalah penyandian default.
sumber
stty
) pada Linux: driver konsol menerjemahkannya ke akhir file. Karakter literal tidak muncul dalam aliran input; itu hanya menyebabkan read () mengembalikan 0.Iya. Kebanyakan editor teks UNIX akan menangani ini secara otomatis, editor programer Windows mungkin menangani ini, editor teks umum (Notepad dasar) tidak akan melakukannya.
Windows tampaknya juga membutuhkan EOF (Ctrl-Z) sebagai END OF FILE dalam beberapa konteks, sedangkan Anda mungkin tidak akan pernah melihatnya di UNIX.
Ingat bahwa MacOS X sekarang UNIX di bawahnya, jadi ia menggunakan akhiran baris UNIX. Meskipun sebelum OS X (MacOS 9 dan di bawah) ia memiliki akhir sendiri (\ r)
EDIT: dalam format CR dan LF lainnya:
sumber
read()
mengembalikan nol byte alih-alih karakter tertentu.Encoding Unicode apa yang digunakan bukan berbasis OS.
Bahkan Windows notepad.exe memiliki opsi terdaftar- (saya akan memasukkan tanda kurung apa maksudnya notepad itu) ANSI (bukan unicode), Unicode (notepad berarti Unicode LE), Unicode Big Endian (BE), UTF-8
ANSI bukan unicode, ini melibatkan jumlah karakter yang sangat terbatas, jadi mari kita kesampingkan itu.
Tetapi melihat bahkan notepad dapat melakukan LE, atau BE, atau UTF-8
Dan selain notepad, UTF-8 dapat dengan atau tanpa BOM.
Dan saya menggunakan Windows dengan Cygwin meskipun port Windows mungkin melakukan \ r \ n bahkan ketika Anda menentukan \ n Telah melihat dan melakukannya.
Tidak ada satu aturan pun tentang apa pengkodean Unicode menggunakan OS tertentu. Itu tidak akan menjadi OS yang sangat fleksibel jika ada.
Untuk benar-benar melihat perbedaan, ketahui Perangkat Lunak, apa yang Encoding gunakan atau tawarkan oleh perangkat lunak.
Dapatkan Cygwin dan xxd, dan / atau hex editor dan lihat apa yang sebenarnya ada di dalam file. Gunakan perintah 'file' untuk membantu mengidentifikasi file. Maka Anda benar-benar melihat apa UTF 16bit LE itu. Apa itu UTF 16bit BE. Apa itu UTF-8 (dan UTF-8 dapat dengan atau tanpa BOM).
Kadang-kadang Anda dapat memberitahu notepad untuk menyimpan sebagai unicode (dengan mana notepad berarti unicode 16 bit endian kecil), dan itu tidak akan. Tetapi pilih font unicode seperti arial unicode, dan salin dalam beberapa karakter unicode dari charmap dan itu akan .. Dan cara yang baik untuk melihat apa yang dilakukan notepad atau perangkat lunak apa pun, adalah dengan melihat hex file.
Perintah dd (perintah * nix yang saya jalankan dari cygwin di dalam windows) dapat mengubahnya
Dan notepad itu sendiri dapat disimpan sebagai UTF-16 Big Endian atau UTF-16 Little Endian atau UTF-8
Jika Anda orang teknis atau bahkan hanya pengguna notepad, Anda tidak terikat pada satu penyandian karena OS Anda!
Saya kira UTF-8 lebih masuk akal daripada UTF-16, UTF-16 akan menggunakan 16 bit bahkan untuk karakter yang hanya membutuhkan 8 bit. Namun, ingatlah bahwa charmap menunjukkan kode UTF-16.
Sublime (editor teks windows) menyimpan unicode sebagai UTF-8 secara default.
Saya menggunakan Windows dan terkadang unicode, dan saya kebanyakan menggunakan UTF-8.
Dan karena Windows fleksibel secara teknis, linux setidaknya fleksibel secara teknis!
sumber
file
dantype
di dalam Cygwin prompt?xxd
dantype
perintah hilang dalam instalasi Cygwin standar saya kira. Selain itu saya ingin mereproduksi hasil Anda.type
adalah perintah standar yang dibangun ke dalam cmd.exexxd
kemungkinan besar tidak diinstal dengan cygwin secara default, tetapi ketika Anda menginstal cygwin atau setelahnya, jika Anda memulai pengaturan cygwin Anda mendapatkan daftar panjang perintah yang dapat Anda instal untuk digunakan di cygwin, dan cukup ketik xxd ke dalam kotak pencarian pengaturan cygwin dan muncul. xxd juga tersedia dari setelah instalasi vim7 sehingga Anda bisa mendapatkannya dari sana juga.c:\cygwin\bin
(jika itu adalah subdirektori bin cygwin), ke jalur Anda. Juga setiap perintah cmd internal seperti 'ketik' atau 'dir', atau exe eksternal seperti calc.exe (kalkulator windows) dapat dijalankan / diluncurkan dari dalam cygwin. Cukup banyak hal yang dapat dijalankan dari cygwin dapat dijalankan dari cmd dan sebaliknya. Jika Anda ingin menggunakan bash maka gunakan cygwin dan jika Anda mengalami masalah dengan tanda kutip tunggal vs ganda kemudian jalankan perintah cygwin di dalam cygwin dan yang cmd dalam cmd.echo 61|xxd -r -p>a.a
lalu cobatype a.a
Jadi Anda benar-benar bisa mendapatkan dump byte dengan xxd -p, mengatur ulang atau memodifikasi byte kemudian memasukkannya ke xxd -r -p dan mendapatkan file berbeda baru dengan pengkodean yang berbeda atau data berbeda berdasarkan data lama. Perintah "file" mencari tahu pengodean, berdasarkan byte.Linux menggunakan UTF-8, dan setiap karakter adalah antara 1 dan 6 byte, bukan antara 1 dan 4 byte.
sumber