Pertanyaan Mengapa isascii () tidak digunakan lagi?


Menurut manascii () manual:

http://linux.die.net/man/3/isascii

POSIX.1-2008 menandai isascii () sebagai usang, mencatat bahwa itu tidak bisa   digunakan dengan mudah dalam aplikasi yang dilokalkan.

Saya tidak yakin saya melihat di mana masalah portabilitas. Implementasi yang sangat sederhana dari fungsi ini adalah:

int isascii(int ch) { return ch >= 0 && ch < 128; }

Dalam situasi apa penerapan di atas tidak memadai atau tidak portabel?

Terima kasih


10
2017-09-25 05:06


asal


Jawaban:


Saya kira itu tidak akan berhasil jika Anda memiliki pengkodean karakter yang tidak menggunakan rentang tujuh-bit rendah khusus untuk ASCII. Mungkin terjadi di beberapa pengkodean multibyte, ketika byte yang diberikan hanya bagian dari karakter.

Misalnya, di Shift-JIS, byte kedua bisa mulai dari 0x40, yang tumpang tindih dengan ASCII. Dan bahkan dalam byte pertama, ada beberapa perubahan kecil, seperti 0x5C (simbol mata uang, bukan backslash) atau 0x7E (semacam garis miring, bukan tilde).

aku menemukan ini artikel di mana seseorang menjelaskan alasan di balik tidak masuknya fungsi POSIX dalam desain OS mereka sendiri:

Fungsi ini agak sia-sia. Jika kita menggunakan pengkodean karakter yang tidak      ascii kompatibel, maka itu tidak masuk akal. Jika kita menggunakan karakter waras      encoding seperti UTF-8, maka Anda dapat memeriksa apakah nilainya paling banyak 127.


3
2017-09-25 05:19



Itu menit pertemuan katakan ini:

isascii: tandai usang. Penggunaan Aplikasi harus dicatat bahwa ini tidak dapat digunakan secara portabel dalam aplikasi yang dilokalkan.


0
2017-09-25 05:37