Unicode(utf16)を取り扱う

概要

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

UTF16のマクロファイル

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

PICTURE

    #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);