Unicode文字の上手い検出方法No.35945
でるもんたいいじま さん 17/08/07 17:34
 
こんにちは。秀丸愛用者の「でるもんた・いいじま」です。

テキスト中にある「Shift_JISの範囲外の文字」ぜんぶに色をつけて
表示させたいと考えています。現在は下記のような検索をしています
(そのうちマクロとして書き起こす予定です)。

  検索(S):[^\x01-\x80\xA0-\xDF\x81\x40-\xFCFC]
    ・「単語の検索(W)」OFF
    ・「正規表現(R)」ON
    ・「あいまい検索(F)」OFF
    ・「検索文字列を強調(I)」ON
    ・「検索したら閉じる(D)」ON

とりあえず、マクロの findspecial と比べてもこれがベストかなと
考えているのですが、もしかしてどなたか、何かもっとスマートな
方法をご存じないでしょうか? ご存知でしたらぜひ教えてください。

☆ ☆ ☆

以下余談ですけど、この操作をしようとしている背景について。

最近はブログの投稿やツイッターの記事などで、主にスマホユーザーと
思われる人たちが、Shift_JISの範囲外の文字をどんどん使っています。
かくいう私自身も、ブログ等へのコメントやツイッターへの投稿など
「Unicodeの文字のほぼ全部を読み書きできることが前提の領域」では、
ハートマークなどの記号類、あるいは上付き・下付き文字などをけっこう
使っています。

で、そういう状況なのですが、そういうものをコピペしてファイルに
保存する際、ぜんぶUTF-8にしてしまえば話は簡単なのですが、どうも
20世紀の脳ミソにとっては、全面的なUTF-8化には抵抗があります。
もし、既存の文字に置き換えることで情報を損なわずにShift_JISで
保存できるなら、できるだけShift_JISで保存したいと考えています。

たとえば、「!?」の2文字が全角1文字の枠に納まった文字(コード
ポイントはU+2049;本来の存在理由は、縦書き印刷用のデータを
テキストファイルで入稿することでしょう)があったら、ASCIIの
「!」と「?」の2文字の組み合わせに置き換えて保存したいと考えて
います。

でも、Unicodeには膨大な数の文字があるので、すべての文字について
Shift_JISへの置換先を(もしくは置換できない旨を)指定するのは、
物理的に不可能です。

ちなみに今のところはデータ量が少ないので、「Unicode文字を目視で
さがすのは根本的に無理だが、一括検索して手作業で修正する程度なら
まったく苦にならない」という状態です。もう少しデータ量が増えるよう
であれば、頻出の文字については自分用にチューンした変換テーブルを
用意しようと思っています。

☆ ☆ ☆

ではでは。

[ ]
RE:35945 Unicode文字の上手い検出方法No.35946
vscode-life さん 17/08/07 19:22
 
@編集面のテキスト→C層でwstrで引き出し
Awin32apiでもmarshalによるキャストでもなんでもいいけれども
 @をcp932文字列に変換
Bnewfile して、Aのcp932文字列をinsert
C @の編集面とA編集面を「ファイル比較(compfile) カラーマーカー付き」
D Bは編集無視してクローズ

手前味噌な正規表現判断を排除しつつ、
秀丸の機能に乗るなら、
数秒で思いつく範囲だと、
上みたいな案が最初に頭によぎりますかねぇ。
(短い時にあまり速度が乗らないが、長くなっても速度があまり落ちなさそうなこと
が期待できる)

cp932で扱えない文字列を、
変数内に「場所と文字セットで
格納しておく必要がある、
というならまた異なるけれでしょうけれども。

[ ]
RE:35946 Unicode文字の上手い検出方法No.35947
でるもんたいいじま さん 17/08/08 00:56
 
でるもんた・いいじまです。

一度は長々と返信を書いたのですが、再度炎上しかねないので
ばっさり削りました。

残念ながらvscode-lifeさんのご提案は、私の求めているものとは
真逆の方向です。それにそもそもvscode-lifeさんには、私が
最初の投稿できちんと書いたはずの基本的背景を全く読み取って
いただけていません。

私とvscode-lifeさんが関わり合っても、お互いにとって何も
プラスの相乗効果を生み出しませんので、どうぞ私の発言には
一切口出し無用に願います。

私は前回の大喧嘩以後、vscode-lifeさんの発言に何か気にかかる
ことがあっても「サイトー企画の皆さん、何か言ってください」
と祈りつつ沈黙を守っています。お互い、そうしませんか?

[ ]
RE:35947 Unicode文字の上手い検出方法No.35948
vscode-life さん 17/08/08 09:56
 
そうですか。

合成文字などがあっても、構成文字の結果がSJIS範囲内にある場合や
似た文字があった際、SJISに収める処置を自動化出来るので悪くないと思ったのです
が、
駄目だったようですね。

ではお互いに関わらないということにしましょう。

[ ]
RE:35945 Unicode文字の上手い検出方法No.35950
Iranoan さん 17/08/08 11:30
 
でるもんたいいじまさん今日は、Iranoan です
> テキスト中にある「Shift_JISの範囲外の文字」ぜんぶに色をつけて
> 表示させたいと考えています。現在は下記のような検索をしています
> (そのうちマクロとして書き起こす予定です)。
>
>   検索(S):[^\x01-\x80\xA0-\xDF\x81\x40-\xFCFC]
あくまで「私なら」という条件付きですし、基本的な考えは同じですが、私なら「特に
強調」の文字列に割り当てておきます。
・「ファイルタイプ別の設定」なので、全てのファイル対象に成らない
・既に「特に強調」を使い切っていると、割り当てるべき適当な場所がない
といった不都合も有りますが

[ ]
RE:35950 Unicode文字の上手い検出方法No.35952
でるもんたいいじま さん 17/08/08 15:57
 
でるもんた・いいじまです。

でるもんた・いいじま(hidesoft.2:35945):
> テキスト中にある「Shift_JISの範囲外の文字」ぜんぶに色をつけて
> 表示させたいと考えています。現在は下記のような検索をしています
> (そのうちマクロとして書き起こす予定です)。
> 検索(S):[^\x01-\x80\xA0-\xDF\x81\x40-\xFCFC]

すいません、まず訂正。
最後に \xFCFC とある部分は \xFC\xFC の誤りです。
#秀丸の正規表現を熟知しているかたなら気付くと思いますが。

Iranoanさん(hidesoft.2:35950):
> あくまで「私なら」という条件付きですし、基本的な考えは同じですが、
> 私なら「特に強調」の文字列に割り当てておきます。

なるほど、特定の拡張子のファイルで日常的にUnicodeを扱うなら、
それもありですね。

> ・「ファイルタイプ別の設定」なので、全てのファイル対象に成らない
> ・既に「特に強調」を使い切っていると、割り当てるべき適当な場所がない
> といった不都合も有りますが

ですね。あと、今回の私の場合、次のような難点もあります。

1.最初に書いたとおり、ターゲットはブログやツイッターからの
 「手動」コピペなので(=スクリプトでダウンロードするなり、
 あるいはブラウザで保存するなりしたHTMLを加工して定形の
 ファイルにするわけではない)、拡張子は今のところ .txt に
 する予定。
 →「共通」ファイルタイプに手を入れると話が面倒になりそう。

2.検出対象は今のところ「Shift_JISにエンコードできない文字を
 一律全部」としているが、将来的には例えば「丸付き数字などの
 機種依存文字」「IBM拡張文字」「IBM拡張文字のNEC領域」などの
 検出、あるいは日本語以外の文字セットでの利用も考えている。
 → マクロで強調対象を切り替えることもできそうだが、
   わざわざそうしなくても、大抵の場合は find 系で足りる。

ちなみに、強調関係をマクロでいじるのは私は未経験です。
余裕ができたら勉強してみよう…。

[ ]
RE:35952 Unicode文字の上手い検出方法No.35953
山紫水明 さん 17/08/08 17:21
 
 でるもんたいいじまさん,

>ちなみに、強調関係をマクロでいじるのは私は未経験です。
>余裕ができたら勉強してみよう…。

 私などが口出しする場面ではありませんが,loadhilligt 文をつかって,特定
の文字を一時的に強調するマクロは私も作っています。
 でるもんたいいじまさんなら,簡単におできになるでしょう。

                    山紫水明
                    SANSHISUIMEI

[ ]