2014-09-25 101 views
10

按照isascii()用戶手冊:isascii()爲何不推薦使用?

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

POSIX.1-2008馬克isascii()爲過時,指出它不能 便攜地在局部應用中使用。

我不確定我看到了便攜性問題。一個非常簡單的實現這一功能的是:

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

在哪些情況下是上面的實現要麼不充分或不便於攜帶?

謝謝

+0

@SaiyamDoshi:這有什麼不同嗎? – Thilo 2014-09-25 05:28:21

+1

該實現是否足夠並且可移植性取決於您想要使用此函數的內容。你有什麼考慮? – hvd 2014-09-25 05:55:33

+4

對於不使用ASCII編碼字符的系統(如IBM大型機),該功能絕對不可移植。 – 2014-09-25 15:53:24

回答

3

我想,如果你不使用的低七位範圍專爲ASCII字符編碼,將無法正常工作。當給定的字節只是字符的一部分時,可能發生在某些多字節編碼中。

例如,在Shift-JIS中,第二個字節可以從0x40開始,與ASCII重疊。 即使在第一個字節中,也有一些輕微的變化,例如0x5C(貨幣符號而不是反斜槓)或0x7E(某種斜槓而不是波形符號)。

我發現這個article如果有人解釋自己的OS設計沒有列入的POSIX功能背後的原因:

此功能是毫無意義。如果我們使用不兼容的字符編碼,那麼它是沒有意義的。如果我們使用一個健全的字符編碼 如UTF-8,那麼你可以簡單地檢查值在127

+0

我想他是要求特定的編碼,這是真的,我想不出任何。我知道的編碼重疊了最初的128個值。 – thang 2014-09-25 05:22:23

0

meeting minutes有這樣一段話:

isascii:馬克過時。應用程序使用應該注意,這不能在本地化的應用程序中使用。

+0

哪個沒有告訴我們什麼,是嗎?他問*爲什麼*它不能在本地化的應用程序中使用。 – 2014-09-25 06:31:16

+1

讓某人引用決定的最初來源仍然很不錯。這可能是我們可以從posix得到的最好的原始推理。 – 2014-09-25 13:30:53

相關問題