2014-09-25 25 views
10

Theo isascii() manpage:Tại sao isascii() không được chấp nhận?

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

POSIX.1-2008 dấu isascii() là lỗi thời, lưu ý rằng nó không thể được sử dụng portably trong một ứng dụng cục bộ.

Tôi không chắc mình thấy vấn đề về tính di động ở đâu. Việc triển khai rất đơn giản chức năng này là:

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

Trong trường hợp nào việc thực hiện ở trên không đủ hoặc không di động?

Cảm ơn bạn

+0

@SaiyamDoshi: điều này có làm gì khác không? – Thilo

+1

Việc thực hiện đó có đủ và di động hay không phụ thuộc vào những gì bạn muốn sử dụng chức năng này. Bạn đang nghĩ gì vậy? – hvd

+4

Chức năng này chắc chắn không thể di chuyển đến các hệ thống không sử dụng mã hóa ASCII cho các ký tự, như các khung chính của IBM. –

Trả lời

3

Tôi cho rằng nó sẽ không hoạt động nếu bạn có mã hóa ký tự không sử dụng phạm vi bảy bit thấp dành riêng cho ASCII. Có thể xảy ra trong một số mã hóa nhiều byte, khi byte đã cho chỉ là một phần của ký tự.

Ví dụ: trong Shift-JIS, byte thứ hai có thể bắt đầu ở 0x40, chồng chéo với ASCII. Và ngay cả trong byte đầu tiên, có một số thay đổi nhỏ, chẳng hạn như 0x5C (ký hiệu tiền tệ thay vì dấu gạch chéo ngược) hoặc 0x7E (một số loại dấu gạch chéo thay vì dấu ngã).

tôi thấy article này mà ai đó giải thích lý do đằng sau việc không bao gồm các chức năng POSIX trong thiết kế hệ điều hành riêng của họ:

Chức năng này là khá vô nghĩa. Nếu chúng tôi sử dụng mã hóa ký tự không phải là tương thích ascii, thì điều đó không có ý nghĩa. Nếu chúng ta sử dụng một lành mạnh mã hóa ký tự như UTF-8, sau đó bạn chỉ có thể kiểm tra nếu giá trị là tối đa là 127.

+0

tôi nghĩ rằng anh ấy yêu cầu mã hóa cụ thể trong đó nó sẽ là sự thật, và tôi không thể nghĩ ra bất kỳ. các mã hóa mà tôi biết chồng chéo giá trị 128 ban đầu. – thang

0

Các meeting minutes đã cho biết:

isascii: đánh dấu lỗi thời . Sử dụng ứng dụng nên lưu ý rằng điều này không thể được sử dụng một cách hợp lý trong một ứng dụng được bản địa hóa.

+0

Điều nào không thực sự cho chúng tôi biết điều gì, phải không? Anh ấy hỏi * tại sao * nó không thể được sử dụng một cách ổn định trong một ứng dụng được bản địa hóa. –

+1

Vẫn còn tốt khi nhờ ai đó trích dẫn nguồn gốc của quyết định. Điều này có thể là tốt nhất chúng ta có thể nhận được từ posix như lý do ban đầu. –

Các vấn đề liên quan