2008年4月1日

關於Unicode的一些判斷函數

utf?函數需要一個binary!當參數。根據此binary的BOM(byte order mark)來做判斷,如果傳出值的絕對值是8,則表示UTF-8;如果傳出值的絕對值為16,則表示UTF-16;如果是Big-Endian,則傳出值為正;如果為Little-Endian,則傳出值為負。 例如:

>> utf? #{EF BB BF}
== 8
>> utf? #{FE FF}
== 16
>> utf? #{FF FE}
== -16
>> utf? #{00 00 FE FF}
== 32
>> utf? #{FF FE 00 00}
== -32

如果binary不是上述的開頭,會得到0的傳出值,表示無法識別。

latin1?需要一個引數,可以是泛字串或字元或整數(表示Code Point)。如果code point都小於256,則傳出true;否則傳出false。latin1?未來有可能改成latin-1?。

ascii?函數和latin1?完全一樣,但用來判斷code point是否小於128。

關於Unicode的BOM,可以參考這篇FAQ的解釋以及這篇Wiki。REBOL的UTF?只用來判斷8, 16, 32的LE和BE的BOM,不支援其他BOM(因為其他BOM很少有人用)。

沒有留言: