第六十八章 Caché 函数大全 $WASCII 函数
返回识别代理项对的字符对应的数字代码。
大纲
$WASCII(expression,position)
$WA(expression,position)
参数
- expression 要转换的字符。
- position 可选-字符在字符串中的位置,从1开始计数。默认值为1。
描述
$WASCII返回表达式中指定的单个字符的字符代码值。$WASCII将代理项对识别为单个字符。返回值为正整数。
Expression参数的计算结果可以是单个字符,也可以是字符串。如果表达式的计算结果为字符串,则可以包括可选的Position参数来指示要转换的字符。该位置将代理项对计为单个字符。可以使用$WISWIDE函数来确定字符串是否包含代理项对。
代理项对是一对16位Caché字符元素,它们一起编码单个Unicode字符。代理词对用于表示汉语、日语汉字和韩语朝鲜语中使用的某些表意文字。(最常用的中文、汉字和朝鲜文字符由标准的16位Unicode编码表示。)。代理对为日本JIS X0213:2004(JIS2004)编码标准和中国GB18030编码标准提供Caché支持。
代理项对由十六进制范围D800到DBFF的高位16位字符元素和十六进制范围DC00到DFFF的低位16位字符元素组成。
$WASCII函数将代理项对识别为单个字符。$ASCII函数将代理项对视为两个字符。在所有其他方面,$WASCII和$ASCII在功能上是相同的。但是,因为$ASCII通常比$WASCII快,所以对于不太可能遇到代理项对的所有情况,$ASCII都是首选的。
示例
以下示例显示$WASCII返回代理项对的Unicode值:
/// d ##class(PHA.TEST.Function).WASCII()
ClassMethod WASCII()
{
IF $SYSTEM.Version.IsUnicode() {
SET hipart=$CHAR($ZHEX("D806"))
SET lopart=$CHAR($ZHEX("DC06"))
WRITE !,$ASCII(hipart)," = high-order value"
WRITE !,$ASCII(lopart)," = low-order value"
SET spair=hipart_lopart /* surrogate pair */
SET xpair=hipart_hipart /* NOT a surrogate pair */
WRITE !,$WASCII(spair)," = surrogate pair value"
WRITE !,$WASCII(xpair)," = Not a surrogate pair"
}
ELSE {WRITE "此示例需要安装Unicode的Caché"}
}
DHC-APP>d ##class(PHA.TEST.Function).WASCII()
55302 = high-order value
56326 = low-order value
71686 = surrogate pair value
55302 = Not a surrogate pair
以下示例比较代理项对的$WASCII和$ASCII返回值:
/// d ##class(PHA.TEST.Function).WASCII1()
ClassMethod WASCII1()
{
IF $SYSTEM.Version.IsUnicode() {
SET hipart=$CHAR($ZHEX("D806"))
SET lopart=$CHAR($ZHEX("DC06"))
WRITE !,$ASCII(hipart)," = high-order value"
WRITE !,$ASCII(lopart)," = low-order value"
SET spair=hipart_lopart /* surrogate pair */
WRITE !,$ASCII(spair)," = $ASCII value for surrogate pair"
WRITE !,$WASCII(spair)," = $WASCII value for surrogate pair"
}
ELSE {WRITE "此示例需要安装Unicode的Caché"}
}
DHC-APP>d ##class(PHA.TEST.Function).WASCII1()
55302 = high-order value
56326 = low-order value
55302 = $ASCII value for surrogate pair
71686 = $WASCII value for surrogate pair
下面的示例显示了对代理项对的位置计数的影响。它返回每个位置的$WASCII和$ASCII值。$WASCII将代理项对计为一个位置;$ASCII将代理项对计为两个位置:
/// d ##class(PHA.TEST.Function).WASCII2()
ClassMethod WASCII2()
{
IF $SYSTEM.Version.IsUnicode() {
SET hipart=$CHAR($ZHEX("D806"))
SET lopart=$CHAR($ZHEX("DC06"))
WRITE !,$ASCII(hipart)," = high-order value"
WRITE !,$ASCII(lopart)," = low-order value",!
SET str="AB"_lopart_hipart_lopart_"CD"_hipart_lopart_"EF"
FOR x=1:1:11 {
WRITE !,"position ",x," $WASCII ",$WASCII(str,x)," $ASCII ",$ASCII(str,x)
}
}
ELSE {WRITE "This example requires a Unicode installation of Caché"}
}
DHC-APP>d ##class(PHA.TEST.Function).WASCII2()
55302 = high-order value
56326 = low-order value
position 1 $WASCII 65 $ASCII 65
position 2 $WASCII 66 $ASCII 66
position 3 $WASCII 56326 $ASCII 56326
position 4 $WASCII 71686 $ASCII 55302
position 5 $WASCII 67 $ASCII 56326
position 6 $WASCII 68 $ASCII 67
position 7 $WASCII 71686 $ASCII 68
position 8 $WASCII 69 $ASCII 55302
position 9 $WASCII 70 $ASCII 56326
position 10 $WASCII -1 $ASCII 69
position 11 $WASCII -1 $ASCII 70