機種依存文字と文字コードNo.02241
山紫水明 さん 08/12/14 22:56
 

 秀丸担当さん,

次のようなマクロを実行します。
//--------------------------------//
#i = 0x8790;
while( #i <= 0x879c ) {
    insert char(#i);
    #i = #i + 1;
}
insertreturn
up;
copyline;
down;
paste;
endmacro;
//-----------------------------//

(1)
2行の同じ内容の文字列が表示されるともいます。
しかし,4個を除いてその文字コードが異なります。
1行目はマクロで指示したとおりですが,コピーすると外見は同じですが,コー
ドが異なる文字に変わっています。
 これは手動でコピーと貼り付けを行っても結果は同じです。

(2)
 次に"\x87\x90"で検索をしてみます。
通常の検索では,正しくヒットします。(正規表現にする必要あり)
マクロで検索すると別のコードの同じ文字にヒットします。(正規表現かどうか
に関わりなく)
 他の文字でも同じ結果になるようです。

 こういうものでしょうか?
    Vista + 秀丸エディタ7.10(浮動小数点数統合版)

              山紫水明

[ ]
RE:02241 機種依存文字と文字コードNo.02242
秀丸担当 さん 08/12/15 11:07
 

やってみたところ、言われている通りになりました。
コピーした段階で文字はUnicodeになっていて、UnicodeからShift-JISへの変換
で、変わってしまうようです。
Shift-JISでの同じ形の2つのコードは、Unicodeでは共通のコードになってしま
うため、そうなってしまうようです。

[その他]→[動作環境]→[編集]→[コピー&貼り付け]に、「貼り付けでUnicode
を使用する」というオプションがありますが、これをOFFにしてもコピーの段階
で既にUnicodeになっているので回避はできないようです。

「コピーでUnicodeを使用する」というオプションを設けるか、それに相当する
何らかの方法があると対策はできると思いますが、そうするとUnicodeのコピー
ができなくなるので、完全に問題の無い対策は難しいかもしれません。

[ ]
RE:02242 機種依存文字と文字コードNo.02243
緒方聡 さん 08/12/17 23:05
 
外していたらご容赦ください。

秀丸だけでコピーとペーストが完結するのであれば、
BOX 選択/BOX 貼り付けと同じ CF_DSPTEXT を使用して
元の Shift_JIS コードをそこに持たせると
Unicode の正規化による今回の問題を解決できるような気がします。
ただし、単純に倍の文字列を持たせるので、パフォーマンスや
その他の問題が出てきそうな気もします。

文章の内容そのものを扱う場合は、こうした正規化があっても
問題になることはあまりありませんが、文章のコードそのものに
意味がある場合、Unicode の正規化は厄介な問題ですよね。

[ ]
RE:02243 機種依存文字と文字コードNo.02244
秀丸担当 さん 08/12/18 10:58
 

>秀丸だけでコピーとペーストが完結するのであれば、
>BOX 選択/BOX 貼り付けと同じ CF_DSPTEXT を使用して
>元の Shift_JIS コードをそこに持たせると
>Unicode の正規化による今回の問題を解決できるような気がします。
>ただし、単純に倍の文字列を持たせるので、パフォーマンスや
>その他の問題が出てきそうな気もします。


確かにCF_DSPTEXTのように秀丸エディタ独自の形式を入れておけば、秀丸間では
なんらかの対策はできると思います。
CF_DSPTEXTはBOX選択の情報に使っているので、別の名前を付けた形式にすれば
できると思います。折りたたみの情報や秀丸メールの折り返し禁止情報もそうい
った感じで持たせています。

やるとしたら、パフォーマンスは低下すると思います。
編集中にShift-JISの別々のコードとUnicode独自の文字が混在する場合、それを
コピーした場合どう解釈するのかを考えると、Shift-JISではなく完全に独自な
形式になると思います。
あと秀丸間でも、異なるエンコードのファイル間でのコピー貼り付けも厄介にな
ってくると思います。
他にも何かあるかもしれません。
意識しなくてもいつでも完全にコピーできるものを目指すのは、不可能ではない
と思いますが、いろいろ難がありそうです。

現状で、マクロでやるのなら、文字数制限はありますがgettextとinsertで対策
できるかもしれないです。

[ ]
RE:02242 機種依存文字と文字コードNo.02245
山紫水明 さん 08/12/18 22:41
 
 秀丸担当さん,

 コピーについては事情了解しました。
 もう一つの問題,検索で手動とマクロが異なることについてはいかが
でしょう。

                                        山紫水明
                                        SANSHISUIMEI

[ ]
RE:02245 機種依存文字と文字コードNo.02246
秀丸担当 さん 08/12/19 09:58
 

> コピーについては事情了解しました。
> もう一つの問題,検索で手動とマクロが異なることについてはいかが
>でしょう。

検索についても同様の問題がありました。
見逃していました。すみません。

手動とマクロというより、正規表現かどうかによって違うようです。

searchdown "\x87\x90";

searchdown "\\x87\\x90", regular;

で結果が異なるようです。
手動でも正規表現ONかOFFかで異なりました。
理由はコピーと同じような理由で、検索バッファはUnicodeで持っているため同
様の問題が起きていました。

とりあえず、現状での対策としては、手動でもマクロでも正規表現を使えば大丈
夫なようです。

[ ]