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


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

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

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

回答の条件
  • URL必須
  • 1人20回まで
  • 登録:2007/06/13 20:41:53
  • 終了:2007/06/20 20:45:03

回答(4件)

id:Reiaru No.1

Reiaru回答回数152ベストアンサー獲得回数382007/06/13 22:01:00

ポイント23pt

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

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...


???

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

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

id:zachouR

ありがとうございます!

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

2007/06/14 19:56:32
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402007/06/13 22:56:01

ポイント23pt

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

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

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

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

とか。

Perl: One-Liner

id:zachouR

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

2007/06/14 19:57:31
id:iwaim No.3

iwaim回答回数215ベストアンサー獲得回数192007/06/14 01:41:32

ポイント22pt

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

use Encode;

use Encode::JP;

use encoding 'shift-jis';

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

id:zachouR

ありがとうございます!

2007/06/14 19:57:46
id:pmakino No.4

まきのっぴ回答回数355ベストアンサー獲得回数282007/06/14 01:44:22

ポイント22pt

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

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関連

id:zachouR

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

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

2007/06/14 19:58:48

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません