文字化けしている文字を削除したいNo.24835
oshimas さん 08/04/28 22:29
 
お世話になります。

一部文字化けしているテキストファイルがあります。
それを秀丸エディタで開くと、
「認識エラー」
「日本語(Shift-JIS)で読み込み中に変換できなかった文字が476箇所ありまし
た。...操作を選択してください。」
と出ます。
ここで変換できなかった文字にジャンプして、
文字化けしている文字を削除するのですが、
1個1個やらないといけないみたいです。

文字化けしている文字を全部まとめて削除するかスペースに置換したいのですが、
よい方法はないでしょうか。

よろしくお願いします。

[ ]
RE:24835 文字化けしている文字を削除したNo.24844
山紫水明 さん 08/04/29 17:37
 
 oshimasさん,

>文字化けしている文字を全部まとめて削除するかスペースに置換したいのです
>が、よい方法はないでしょうか。

 文字コードについてはあまり自信はないのですが,とりあえず次の方法で試み
られたらいかがでしょう。
 この方面に明るい方,補足コメントいただけたらと思います。

検索語:[\xE0-\xFF\x28\x41-\x25\x20\x2D\x7D-\x30\x20\x74\x27-\x79\x20\x7D\
x20-\x93\x20\x97\x2D-]
置換語:(空白)
正規表現

で全置換。
もし,これでも置換できない文字が残ったら,手動で削除するというのはどうで
しょう。

     では, (^^)/~
                                        山紫水明(ユーザー)
                                        SANSHISUIMEI

[ ]
RE:24835 文字化けしている文字を削除したNo.24845
K'zawa さん 08/04/29 19:38
 
oshimasさん、こんにちは。
K'zawaです。

>文字化けしている文字を全部まとめて削除するかスペースに置換したいのですが、
>よい方法はないでしょうか。

これでどうでしょうか?

    #freecursor = freecursor;
    if ( #freecursor ) freecursorswitch;

    disabledraw;
    while ( 1 ) {
        if ( code == 0 && unicode != 0 ) overwrite " ";
        right;
        if ( ! result ) break;
    }

    if ( #freecursor ) freecursorswitch;

[ ]
RE:24844 文字化けしている文字を削除したNo.24846
山紫水明 さん 08/04/30 08:05
 

追伸です。
検索語の文字コードの指定が間違って JIS コードになっていたようです。
Shift-Jis で指定するところでした。
                                        山紫水明
                                        SANSHISUIMEI

[ ]
RE:24845 文字化けしている文字を削除したNo.24847
秀丸担当 さん 08/04/30 09:51
 

>    #freecursor = freecursor;
>    if ( #freecursor ) freecursorswitch;
>
>    disabledraw;
>    while ( 1 ) {
>        if ( code == 0 && unicode != 0 ) overwrite " ";
>        right;
>        if ( ! result ) break;
>    }
>
>    if ( #freecursor ) freecursorswitch;

このマクロの方法では、unicode文字を見つけることはできますが、Shift-JISで
読み込んだときに文字化けした文字は見つけられないのではないかと思います。

Shift-JIS限定であれば、
検索文字列:[^ -~\xA1-\xDF -K]
正規表現をON
で概ね見つけられるかもしれないです。

これでも完全ではないと思います。
第一バイト \x81〜\x9F、\xE0〜\xFC の場合は、第二バイト \x40〜\x7E、\x80
〜\xFC ではないコードを探さなければいけないので、厳密には難しいかもしれ
ません。
一度Unicodeで保存してから、再びShift-JISで保存しなおしてから、上記置換を
するといいかもしれないです。その場合、一度Unicodeの変換を通った文字は
「・」というような文字に変換されているかもしれません。

警告が出てくるのが邪魔なだけという話であれば、[その他]→[動作環境]で左下
の上級者向け設定をONにして、[その他]→[動作環境]→[ファイル]→[エンコー
ド2]→[開くときのエンコードの種類関連]→[変換できない…]をOFFにすると、
警告が出ないようになります。

[ ]
RE:24847 文字化けしている文字を削除したNo.24848
oshimas さん 08/04/30 23:17
 
お世話になります。

みなさまに教えていただいた方法を試してみたのですが、
改行文字や制御コードとかも一緒にヒットしてしまったりして、
あまりうまくいきませんでした。
文字化けでも、内容が機種依存文字だったり通信エラーだったり
いろいろあるようですので、やっぱりひとつひとつ確認しないと
いけないようです。
手間ですが化けている文字コードごとに検索して、確認しながら
消していくのがいちばん速くて確実かな、と思いました。

>の上級者向け設定をONにして、[その他]→[動作環境]→[ファイル]→[エンコー
>ド2]→[開くときのエンコードの種類関連]→[変換できない…]をOFFにすると、
>警告が出ないようになります。

これ知りませんでした。
今までは文字化けした文字を含むファイルは、grepして置換
しようとしてもエンコードエラーが出て実行できなかったのですが、
これでgrepして置換ができるようになりました。

助かります。ありがとうございました。


[ ]
RE:24848 文字化けしている文字を削除したNo.24859
oshimas さん 08/05/04 09:16
 
たびたびすみません。

これですが、やはり文字化けしてる文字を含むファイルは
エンコードエラーが出てgrepして置換処理できないようです。
警告メッセージを表示しないときは、grepして置換の時も
エラーメッセージを出さずに置換処理が実行できるように
ならないでしょうか。
よろしくお願いします。


[ ]
RE:24859 文字化けしている文字を削除したNo.24877
秀丸担当 さん 08/05/07 10:31
 

>これですが、やはり文字化けしてる文字を含むファイルは
>エンコードエラーが出てgrepして置換処理できないようです。
>警告メッセージを表示しないときは、grepして置換の時も
>エラーメッセージを出さずに置換処理が実行できるように
>ならないでしょうか。
>よろしくお願いします。

確かにgrepして置換のときはこの設定は関係ありませんでした。すみません。
grepして置換の場合は、エラーが出ているときにするのは非常に危険で、置換し
た部分以外の文字化けしていた部分のデータも壊して保存することになるので、
お勧めできないです。

現状で、hidesoft.2:24847で書いた方法で、改行と制御文字は消さないバージョ
ンでマクロで書いてみましたが、これで無理矢理でよければ回避できると思うの
ですが、どうでしょうか。
必ずバックアップしておいてから実行したほうがいいと思います。

if((encode&0x3f)!=1)endmacro;
question "Shift-JISの文字化けを直して上書き保存していいですか?";
if(result==false)endmacro;
$s=searchbuffer;
#s=searchoption;
replaceallfast "[^\x01-\x1f -~\xA1-\xDF -K]", "", regular;
saveas filename2, unicode;
reopen;
saveas filename2, sjis;
setsearch $s, #s;

[ ]