Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$WASCII

サロゲート・ペアを認識して、文字に対応する数値コードを返します。

Synopsis

$WASCII(expression,position)
$WA(expression,position)

パラメータ

expression 変換する文字
position オプション — 文字列内での文字の位置。1 から数えます。既定値は 1 です。

説明

$WASCIIexpression で指定された単一の文字に対し文字コード値を返します。$WASCII は、サロゲート・ペアを単一の文字として認識します。返り値は正の整数です。

expression パラメータは、単一文字あるいは文字列に評価されます。expression が文字列に評価される場合、オプションの position パラメータで、変換したい文字の位置を示す必要があります。position は、サロゲート・ペアを単一の文字としてカウントします。$WISWIDE 関数を使用して、文字列にサロゲート・ペアが含まれているかどうかを判断することができます。

サロゲート・ペアは、単一の Unicode 文字を一緒にエンコードする 16 ビットの Caché 文字要素のペアです。サロゲート・ペアは、中国語、日本語の漢字、韓国語のハンジャ文字で使用されている特定の表意文字を表すために使用されます(頻繁に使用される中国語、漢字、およびハンジャ文字は、標準 16 ビットの Unicode エンコードで表されます)。サロゲート・ペアにより、Caché は日本語 JIS X0213:2004 (JIS2004) エンコーディング標準および中国語 GB18030 エンコーディング標準をサポートできます。

サロゲート・ペアは、16 進数の D800 ~ DBFF の範囲の高位 16 ビット文字要素と、16 進数の DC00 ~ DFFF の範囲の下位 16 ビット文字要素で構成されます。

$WASCII 関数は、サロゲート・ペアを単一の文字として認識します。$ASCII 関数は、サロゲート・ペアを 2 文字として処理します。その他の点では、$WASCII$ASCII は機能的に同じです。ただし、$ASCII は通常 $WASCII より高速なため、サロゲート・ペアが出現しない場合は常に $ASCII が推奨されます。文字から数値コードへの変換の詳細は、$ASCII 関数を参照してください。

以下の例は、サロゲート・ペアの Unicode 値を返す $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 "This example requires a Unicode installation of Caché"}

以下の例は、サロゲート・ペアの $WASCII$ASCII の戻り値を比較します。

  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 "This example requires a Unicode installation of Caché"}

以下の例では、サロゲート・ペアをカウントする position への影響を示します。各 position$WASCII$ASCII の両方の値が返されます。$WASCII はサロゲート・ペアを 1 つの位置としてカウントし、$ASCII はサロゲート・ペアを 2 つの位置としてカウントします。

  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é"}

関連項目

FeedbackOpens in a new tab