秀丸エディタのデータや、外部データがutf16の範囲の文字列であっても、
秀丸マクロやIronPythonは問題なく取り扱うことが出来ますが、
「秀丸マクロ内」及び「IronPython」内に、cp932(sjis)の範囲を超える文字を直接記述する際には、
「秀丸マクロ」や「hmPy」を「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と解釈すべきことを明示します。
「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);