文字列を UTF-16BE 表記に変換、UCS-2 アスキー表記を文字列に変換

ASCIISTR ( string )
return [ ascii string ]
- マルチバイト文字を含む文字列を UTF-16 表記のアスキーコードのみで表現する。


UNISTR ( encode_string )
return [ NVARCHAR2 ]
| encode_string | UCS-2 のバイトコードをアスキーコードで記した文字列式 |
- UCS-2 表記のアスキー文字列を各国語文字列に変換する。

ASCIISTR 関数の内容
文字列をアスキーコードだけを使用した形式に変換する。
文字列 string を アスキーコード(US7ASII)領域はそのまま通過、それ以外は UTF-16(BE) エンコード表現にした後 '\' マークでエスケースした \xxxx 形式の 16 進数のアスキーコード文字列に変換する。
UTF-16(BE) による表記は UNISTR 関数で元のマルチバイトの文字列に復号することができる。(※)
UNISTR 関数の内容
エスケープ処理された UCS-2 形式(※) のアスキー文字列を各国語キャラクタセットの文字列に変換する。
文字列 encode_string のアスキーコード(US7ASII)領域はそのまま通過し、エスケープ処理された \xxxx 形式の文字列を1文字に変換する。
例えば、US7ASCII で構築されたデータベースでも日本語データを格納することができる。日本語環境の入力も表示フォントすら無いような英語 OS や コンソール上から、どうしても日本語を入力したい場合にアスキー入力によって日本語を取り扱うことも(頑張れば)できる。
注意
(※) UNISTR の受け入れる文字は UCS-2 エンコード、ASCIISTR の出力するエンコードは UTF-16(BE) と一致していない。
サポートする文字領域は互換性があり UTF-16 > UCS-2 なので大抵は問題ないと思われる。マニュアルで UTF-16 と書かずに UCS-2 と書いているところをみると一部の文字は逆変換できませんということなのかもしれない。(未確認)
ASCIISTR 使用例
SQL> select str, asciistr(str) utf16_enc from unistr_sample;
STR UTF16_ENC
---------------- ------------------------------
here we go here we go
yes レッツら go yes \30EC\30C3\30C4\3089 go
here we are here we are
全角カタカナ 'レ' の UTF16(BE) コード x'30ec'
SQL> select dump(n'レ', 1016) from dual;
DUMP(N'レ',1016)
---------------------------------------------
Typ=96 Len=2 CharacterSet=AL16UTF16: 30,ec
UNISTR 使用例
ASCIISTR の結果文字列を逆変換する
SQL> select str, asciistr(str) utf16_enc,
2 unistr(asciistr(str)) ucs2_dec
3 from unistr_sample;
STR UTF16_ENC UCS2_DEC
---------------- ------------------------------ ------------------------------
here we go here we go here we go
yes レッツら go yes \30EC\30C3\30C4\3089 go yes レッツら go
here we are here we are here we are
文字コードの種類
SQL 関数 - ASCII_STR,UNISTR 関連