ユニコードを文字に変換するにはNo.04897
G-kai さん 05/10/28 15:24
 
 仕事の関連でユニコード独自の文字が実体参照(?)(「&#nnnnn;」
という形式)となっているファイルを受け取ったのですが、この「&#
nnnnn;」を文字に直す必要があります。

 そこで、秀丸Ver5以降では、「insert "\u0000";」でユニコードの
文字が挿入できるそうですので、下のようなマクロを作ってみたので
すが、16進数がそのまま数字で挿入できるだけでどうもうまく文字に
なりません。
 アドバイスを頂けたらと思い、投稿いたしました。よろしくお願い
いたします。(秀丸Ver5.07、Windows2000SP4です)

#x = x;
#y = y;
#n = 0;
gofiletop;
searchdown2 "&#[0-9][0-9][0-9][0-9][0-9];", regular;
while( result ) {
    #tx = seltopx; #ty = seltopy;
    #ex = selendx; #ey = selendy;
    $sgml = gettext(#tx, #ty, #ex, #ey);
    escape;
    #uni = val( midstr($sgml,2,5) );
    $unihex = hex(#uni);
        beginsel;
    moveto #ex, #ey;
    insert "\u" + $unihex;
    #n = #n + 1;
    finddown2;
 }

moveto #x, #y;
message str(#n) + "個置換しました。";

[ ]
RE:04897 ユニコードを文字に変換するにはNo.04898
秀丸担当 さん 05/10/28 16:27
 

> そこで、秀丸Ver5以降では、「insert "\u0000";」でユニコードの
>文字が挿入できるそうですので、下のようなマクロを作ってみたので
>すが、16進数がそのまま数字で挿入できるだけでどうもうまく文字に
>なりません。

文字列で"\u"と"1234"とかを結合しても、Unicodeの一つの文字にすることはで
きません。
charとasciiのUnicode版に相当するものが無いとできないと思います。現状では
ありません。
unicharとか、unicode(これだとunicodeキーワードとかぶってしまいますが)
という関数があったほうがいいようです。
今後のバージョンで追加を検討したいと思います。

現状でやるとすれば、バイナリモードを利用して無理矢理できないこともないで
すが、少々面倒なことになります。

[ ]
RE:04898 ユニコードを文字に変換するにはNo.04899
G-kai さん 05/10/28 16:47
 
 秀丸担当さま、お忙しいところ恐縮です。

 マクロはあまり作ったことがなくて、マクロ自体が間違っている
のではないかと思っていたのですが、現状ではできないとのこと、
了解いたしました。
 また今後追加を検討していただけるとのこと、ありがとうござい
ます。よろしくお願いいたします。

[ ]
RE:04899 ユニコードを文字に変換するにはNo.04916
G-kai さん 05/11/07 23:10
 
 秀丸担当さま、秀丸Ver5.10β1にて、unichar、unicode関数を追
加して頂いたことを確認いたしました。早速対応して頂き、ありが
とうございます。

 マクロも順調に動き、非常に快適に使わせて頂いています。本当
にありがとうございました。

[ ]