Unicode(utf16)を取り扱う

  • 概要

    秀丸エディタのデータや、外部データがutf16の範囲の文字列であっても、
    秀丸マクロやIronPythonは問題なく取り扱うことが出来ますが、
    「秀丸マクロ内」及び「IronPython」内に、cp932(sjis)の範囲を超える文字を直接記述する際には、
    「秀丸マクロ」や「hmPy」を「utf16のモード」で、動作させるのが良いでしょう。

  • UTF16のマクロファイル

    これまで秀丸マクロをcp932(ShiftJIS)にて保存してきましたが、
    Unicodeを取り扱う際には、秀丸マクロをUnicodeで保存
    します。
    秀丸マクロは通常「cp932(sjis)」ですが、このようにUnicodeの文字列を直接取り扱えるよう「unicode(utf16)」でも動作するようになっています。

      #dll = loaddll( hidemarudir + @"\hmPy.dll" );
      
      #r = dllfuncw( #dll, "SetCodePage", 1200 ); // utf-16
      
      #r = dllfuncw( #dll, "SetStrVar", "currentmacrodirectory", currentmacrodirectory );
      
      #r = dllfuncw( #dll, "DoString", R"IRONPYTHON(
      import clr
      result = "あああ♬♬♬♬♬あああ"
      )IRONPYTHON"
      );
      
      $result = dllfuncstrw( #dll, "GetStrVar", "result" );
      message($result);
      
      #_ = dllfuncw( #dll, "DestroyScope" );
      freedll(#dll);
      

    cp932での記載との違いは以下の3つとなります。

    • マクロの保存文字コード

      マクロそのものを「Unicode(utf-16)」でBOM付きで保存すること

    • 文字コードの明示的な指定

      #r = dllfuncw( #dll, "SetCodePage", 1200 ); // utf-16

      と、IronPythonがutf-16と解釈すべきことを明示します。

  • .pyファイルを外部に出す場合には、utf-16のcoding指定

    「DoFile」を使うなど、.pyファイルを外部に出す際は、マクロをcp932で保存していた際には「#coding:cp932」を指定していましたが、
    マクロをUnicodeで保存する際には.py側は「coding:utf-16」を指定する必要があります。

    例えば、以下のような「myunicode.py」を用意し、Unicode(utf16)で保存します。

      #coding: utf-16
      
      import clr
      result = "あああ♬♬♬♬♬あああ"
      

    マクロ側で以下のように呼び出す形となります。
    マクロもUnicode(utf16)で保存するのを忘れないようにしてください。

      #dll = loaddll( hidemarudir + @"\hmPy.dll" );
      
      #r = dllfuncw( #dll, "SetCodePage", 1200 );
      
      #r = dllfuncw( #dll, "SetStrVar", "currentmacrodirectory", currentmacrodirectory );
      
      #r = dllfuncw( #dll, "DoFile", "myunicode.py" );
      
      $result = dllfuncstrw( #dll, "GetStrVar", "result" );
      message($result);
      
      #_ = dllfuncw( #dll, "DestroyScope" );
      freedll(#dll);