人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PerlでSJISをお使いの方にお聞きします。

文字コードの件ですが、
「ソ」などの危険な文字があります。

これは、ソの前に半角の\を入れれば直りますが、
テキストデータの量が多すぎて大変面倒なのです。
危険な文字を見つけて自動的に半角\を入れてくれる様な
ソフトはないでしょうか?

よろしくご解答お願い致します。

●質問者: zachouR
●カテゴリ:インターネット ウェブ制作
✍キーワード:Perl ソフト テキスト データ 危険
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● Reiaru
●23ポイント

危険な文字を見つけて自動的に半角\を入れてくれる

Perlを始めよう!

http://www.vector.co.jp/soft/win95/util/se169799.html

非常にお手軽なのはこちらなのですが、単一のファイルしか処理できないのが残念な所です。

それでも人の手でちまちまやるよりは確実で早いのではないかと思います。

「テキストの範囲選択 → マクロ → 化ける文字の手当て」で一括自動置換してくれます。


フォルダやファイルが多岐に渡る様な場合には、秀丸エディタの Version 7.xx (ベータ版)、

これに搭載された GREP 置換を用いるのが宜しいかと思われます。

(事前に置換の為の正規表現を記述する必要がありますが)


(それが搭載された秀丸エディタのレビュー記事)

http://www.forest.impress.co.jp/article/2007/04/26/hidemaru7b2.h...


???

― ソ 能 表 予 貼 十 構 媾 圭 兔 申 噂 饅 浬 欺 藹 彌 暴

拿 軆 觸 蚕 鐔 曾 箪 禄 鷭 喀 歃 濬 畚 秉 杤 綵 臀 Ы ?

◎質問者からの返答

ありがとうございます!

コレが欲しかったんです!


2 ● b-wind
●23ポイント

基本的には EUC_JP で記述、入出力時に SJIS に変換、

もしくは use encoding; の使用をオススメしますが、

Perl 自身でも出来なくは無いと思います。

perl -i -e 's/\\/\\\\/g' textfile.txt

とか。

Perl: One-Liner

◎質問者からの返答

ありがとうございます、早速やってみます!


3 ● iwaim
●22ポイント

Perl 5.8.xならこんなものを書いておくと大丈夫じゃないですかね。

use Encode;

use Encode::JP;

use encoding 'shift-jis';

http://q.hatena.ne.jp/1181734910

◎質問者からの返答

ありがとうございます!


4 ● まきのっぴ
●22ポイント

乱暴なやり方ですが、ダメ文字であるか否かに関わらず片っ端から \ でエスケープするなら

perl -pe 's/(.)/\\$1/g' < 変換元ファイル > 変換後ファイル

でいけます。(Windows の場合は ' を " に置き換えてください)

もう少し対象範囲を絞り込んで、記号を片っ端からエスケープするなら

perl -pe 's/([!-\/:-@\[-`{-~])/\\$1/g' < 変換元ファイル > 変換後ファイル

とか。

ただ、そもそもソや表などの文字の後に \ を入れるという発想自体あまりスマートとは言えません。

SJIS バイト列をそのままリテラルにしたり正規表現に入れたりするから問題が起きてこのような泥臭い対策を取らなければならなくなるのであって、そもそも SJIS バイト列ではなく UTF-8 文字列に対して処理を行うべきです。

ソースコードは UTF-8 で書き、ファイルやユーザからの入力は PerlIO で入力時に UTF-8 文字列にデコードし、ファイルや標準出力への出力時に SJIS バイト列にエンコードする形を取ればこのような泥臭い対策を取る必要はありません。

参考: Perl 5.8.x Unicode関連

◎質問者からの返答

そうですね、今まで何も考えずに作っていたので、、、。

今後はUTF-8で書こうと思っています。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ