質問箱 No.65: 区点コードから文字に変換したい

      ◆ 質問箱No.65 質問者:  西村 重幸  1997年11月 190号 P.21
          ◆ 質問箱 目次へ
No.65-1   区点コードから文字に変換したい 回答者
  高橋 周助
1997年12月
191号 P.28
   ◆ No.65(1997年 11月号)の回答-1
  ご質問の中のプログラムで試してみると、63区以上ではうまくいかないようです。16行目、ELSEの後のLETが抜けているのは、何かのハズミでしょう。

  どう直せば良いか頭が回りませんので、私なりのプログラムを作ってみました。これを解読して頂ければ、原理的なものがわかってもらえるかな、と思います。

  なお、以下の計算式は、Windows3.1に付属していた『日本語入力ガイド』<MS IME for Windows>の巻末の表から割り出してみたものです。外字コード領域と拡張文字領域(供給元によって差がある)はカバーしていません。

     1 <TEST>
     2     LET V40="0158 2603 2378 0446 2833 4468 4002 0159"; 
     3
     4     DISP OPEN;
     5     LET V40=FORM$(V40,3);
     6     LET X40=LEN(V40);
     7
     8     FOR X2=1 TO X40 STEP4;
     9
    10            /**** 『区』に対応する 上位バイト ******************/
    11              LET V11=MID$(V40,X2,2);   LET X11=IVAL(V11);
    12              IF X11<=62 THEN LET V11=HEX$((X11+1)/2+128);
    13              IF X11>62  THEN LET V11=HEX$((X11+1)/2+192);
    14
    15            /**** 『点』に対応する 下位バイト ******************/ 
    16            LET V12=MID$(V40,X2+2,2);  LET X12=IVAL(V12);
    17            IF X11 MOD 2=1 AND X12<=64 THEN LET V12=HEX$(X12+63);
    18            IF X11 MOD 2=1 AND X12>64  THEN LET V12=HEX$(X12+64);
    19            IF X11 MOD 2=0             THEN LET V12=HEX$(X12+158);
    20
    21            /**** 表示 ********************************************/ 
    22           DISP CHR$(HEXVAL(V11+V12));
    23
    24        NEXT;
    25 STOP;   
戻る