最近のJavascriptにおける
「1バイト文字も2バイト文字も一文字として判断する」
という特性を利用して、外字文字列のコードを抽出したいのですが…

対象としたいテキスト文字数が80万字ほどあり(^^;、
この量をTEXTAREAへpasteしてJavascriptで一気に処理できるか?
という点を知りたいのです。
まだテキストが手元にないので試せないのですが、
知識としてでも知ってる方がいたらお教え下さい。

ブラウザ環境はIE5.0+Winです。

要するにcsvテキストからシフトJISの0xF040~FFFCを含む行数を
抽出したいだけなので、perlで簡単な方法があればかまわないのですが…

このQ&Aに関連する最新のQ&A

A 回答 (3件)

さすがに80万文字っていうのは無理じゃないでしょうか。

分割するにしても、いろいろと面倒そうですし、ご自分でも指摘していらっしゃるように、perlで簡単なスクリプトを作るのが現実的だと思います。

アルゴリズムとしては、
1. 1byte読み込む
2. ~0x7f、または0xa1~0xdfなら、1.へ
3. 0xf0~0xffなら、外字用処理を行った後、1.へ
4. それ以外なら、1byteカラ読みして、1.へ
でいいでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

やはりperlですか。
「\」処理など変なミスがあると余計なロスが出そうで…
とりあえずそれで試してみます。

お礼日時:2001/02/14 15:17

 補足みました。



 NNは2バイト文字を1文字としては扱いません(^_^; これはIEだけの仕様です。
 IEは内部でUNICODEを使用しており、全角半角に関わらずすべての文字を2バイトコードとして扱っています。これが、全角と半角を両方とも1文字として扱える正体です。
 NNは内部でUNICODEを使用していないので、2バイト文字は飽くまで2文字なのです。
 ま、NNは使わないということであれば関係ないですね。

 ちなみにもうプログラムはJavaScriptで書かれたのでしょうか。 処理重くないですか?

この回答への補足

プログラムは「桐」というDBソフトに
外字検出関数という便利なモノがあったのでそれを使うことになりました(^^;

NNの話ですが、4.75では

a = "あああ".length;

としたときに「3」と返します。
ちなみに4.01では「6」です。さらに、

A = "庁".charCodeAt(0);

などとしたときも、4.75ではIEと同じく「24193」と表示します。
ちなみにNN4.01では「-110」と表示されます。

NNはバージョンによって2バイト文字の判定が違うと思います。

補足日時:2001/02/15 14:25
    • good
    • 0

 えーとですね。


 2バイト文字を1文字として数えるのはIEが昔からやってきたことで、NNでは逆に今でも2バイト文字は2文字です。
 ですのでJavaScriptでやるのであればその辺の区分けが必要です。

 Perl でできるんだったら Perl の方が簡単ですよ(^_^; わざわざ苦労することもないです。IEとNNの区分けも面倒ですし。

 Perl では、文字列をシフトJISに変換したのち、

  if ( $st =~ /([\xF0-\xFF][\x40-\xFC])/ )

 おそらくはこれで、文字列$stの中に外字が含まれているかどうかが判別できるはずです。上記のif文では、$st に外字が含まれていればtrueを、そうでなければfalseを返します。
 たしか。
 正規表現はあんまし使わないので自信はないです。何度かテストしてみてください。

この回答への補足

回答ありがとうございます。
Javascriptの実行はIEで行い、公開する類のものではないので大丈夫です。
最近のNN(4.75)では2バイト文字は一文字と数えていた気がするのですが…
関数によって違うのかもしれません。
HTMLのINPUT MAXLENGTHは相変わらず2バイト文字=2文字ですが。

補足日時:2001/02/14 15:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング