BOM付きテキストでの表示についてNo.35350
Yossi さん 16/10/20 14:02
 
お世話になります。

Unicode(UTF-16)BOM付きテキストでの表示についてです。
読み込んだテキストの先頭行は以下のようになっているのですが

ABCDEFG01234
56789+-/*

■秀丸8.64で表示させると
以下のように2文字目が離れて表示され、カーソル位置の文字コードを表示すると
先頭の Aでは U+FEFF、Bの手前の空白で U+0041 と Aのキャラクタコードが表示され
ます。

A        BCDEFG0123456789+-/*


■サクラエディタでは
以下のように先頭に8つの空白 FEFF が入ってしまいますが
文字が分離表示されることはありません

        ABCD
EFG0123456789+-/*

■Windows10のメモ帳では以下のように普通に表示されます。

ABCDEFG0123456789+-/*


何とかなるでしょうか?

[ ]
RE:35350 BOM付きテキストでの表示についNo.35351
Yossi さん 16/10/20 14:04
 
Unicodeテキストをコピペしたためか文字が化けたので再投稿します。

Unicode(UTF-16)BOM付きテキストでの表示についてです。
読み込んだテキストの先頭行は以下のようになっているのですが

ABCDEFG0123456789+-/*

■秀丸8.64で表示させると
以下のように2文字目が離れて表示され、カーソル位置の文字コードを表示すると
先頭の Aでは U+FEFF、Bの手前の空白で U+0041 と Aのキャラクタコードが表示され
ます。

A        BCDEFG0123456789+-/*


■サクラエディタでは
以下のように先頭に8つの空白 FEFF が入ってしまいますが
文字が分離表示されることはありません

        ABCDEFG0123456789+-/*

■Windows10のメモ帳では以下のように普通に表示されます。

ABCDEFG0123456789+-/*


何とかなるでしょうか?

[ ]
RE:35351 BOM付きテキストでの表示についNo.35352
秀丸担当 さん 16/10/20 16:52
 

確かにMS ゴシックなどのフォントでそうなることが確認できました。

秀丸エディタは等幅フォントの場合は、マス目状に収まるように文字ピッチを指
定して描画していますが、GDIを使って文字列としてまとめて描画する限りでは
そうなってしまうようです。

回避する方法としては、
[その他]→[動作環境]の左下の「上級者向け設定」をONにして、
[その他]→[動作環境]→[表示/操作]→[文字の描画]の「3Dグラフィックスアク
セラレータによる文字の描画」をONにするとDirectWriteを使ってGDIを使わない
ので、回避できるようです。

または、上記オプションがOFFの場合では、[その他]→[ファイルタイプ別の設
定]→[体裁]→[タブ]で「自由配置」にしておくと、等幅フォントであっても、
マス目状に収めない方式になります。
この場合、文字によってはマス目状に収まらないですが、メモ帳と同じような文
字幅ゼロの描画になって回避できると思います。

あるいは、少々高度な方法ですが、強調表示で正規表現で「[\ufeff]」を強調し
ても回避することはできました。
GDIを使う限りは分離描画するしかなさそうなので、強調表示と同じような感じ
で自動的に分離するべきか検討します。

ちなみにBOMが付くのは本来はファイル先頭の1文字分だけで、それ以降にある
U+FEFFは通常はテキスト本文中にはあるべきものではないので、もし意図して出
現させているのではないとしたらファイルが正常ではないということになると思
います。

[ ]
RE:35352 BOM付きテキストでの表示についNo.35353
Yossi さん 16/10/20 22:00
 
>GDIを使う限りは分離描画するしかなさそうなので、強調表示と同じような感じ
>で自動的に分離するべきか検討します。
>
>ちなみにBOMが付くのは本来はファイル先頭の1文字分だけで、それ以降にある
>U+FEFFは通常はテキスト本文中にはあるべきものではないので、もし意図して出
>現させているのではないとしたらファイルが正常ではないということになると思
>います。

今回表示したテキストはXMLファイルをプログラムから生成して結果を確認している
際に発見したものです。プログラムの方も見直してみます。
一つしかないはずの BOMが複数存在するので実装依存になってたんですね

[ ]
RE:35353 BOM付きテキストでの表示についNo.35354
Yossi さん 16/10/21 22:43
 
当たり前ではありますが、U+FFFEが先頭に一つしかない出力にすると
全く問題ありませんでした。

希望を言わせていただくと、秀丸はエンコードが判定できないとき警告が
表示されますが
今回のような場合にも警告表示を検討していただけると嬉しいかなと思います。

[ ]
RE:35354 BOM付きテキストでの表示についNo.35355
秀丸担当 さん 16/10/24 10:09
 

確かに本文中にU+FEFFやU+FFFEがあっても認識エラーとはならないです。
警告にしても問題なさそうであれば、修正を検討したいと思います。

調べてみたところ、少なくともU+FFFEについては文字ではないのでエラーでよさ
そうです。
U+FEFFは厳密には「ZERO WIDTH NO-BREAK SPACE」という文字のようで、エラー
扱いではよくないケースもあるかもしれないので、慎重に考えたいと思います。

[ ]
RE:35355 BOM付きテキストでの表示についNo.35356
Yossi さん 16/10/25 18:06
 
或いは MS謹製のメモ帳の挙動に倣っていただくかですが
メモ帳では何事もないかのように表示し、保存するときは元々存在したイレギュラー
な U-FFFEもそのまま保存する仕様のようです。

ただ、今回は秀丸の表示がおかしかったお陰でプログラムのコードがおかしいのがわ
かったので現在の仕様でもいいかなと思います。
言い出しっぺの自分が言うのもナンですがめったにあるケースではないので

[ ]
RE:35356 BOM付きテキストでの表示についNo.35357
秀丸担当 さん 16/10/26 09:00
 

メモ帳は、幅ゼロの文字として存在していて、例えばCtrl+Homeでファイル先頭
にカーソル移動してから、右矢印キーを押すと、数文字分、何も動かないように
見えると思います。

秀丸エディタでも、「MS Pゴシック」などのプロポーショナルフォントを使
えばそれと同じになります。
「MS ゴシック」などの固定ピッチフォント(等幅フォント)の場合は、敢え
て文字ごとの幅は無視して、マス目状に収まるように描画しているので、何かあ
るように見えます。

「MS ゴシック」であってもタブ幅を「自由配置」にすると、プロポーショナ
ルフォントと同様になります。
タブが自由配置の場合は、結果的にそうなっていますが、前々から個別のオプシ
ョンとして「固定ピッチフォントでもプロポーショナルフォント扱いにする」と
いったようなオプションがあったらいいと思っていたので、これを機にオプショ
ン追加も検討したいと思います。

[ ]
RE:35357 BOM付きテキストでの表示についNo.35358
Yossi さん 16/10/27 13:13
 
>秀丸エディタでも、「MS Pゴシック」などのプロポーショナルフォントを使
>えばそれと同じになります。
>「MS ゴシック」などの固定ピッチフォント(等幅フォント)の場合は、敢え
>て文字ごとの幅は無視して、マス目状に収まるように描画しているので、何かあ
>るように見えます。
>
>「MS ゴシック」であってもタブ幅を「自由配置」にすると、プロポーショナ
>ルフォントと同様になります。

設定でメモ帳と同様の表示にもできると前にも記してくださってましたね
失念してました。m(__)m

[ ]