• ベストアンサー

Javascript使用時のForm文字数上限は?

最近のJavascriptにおける 「1バイト文字も2バイト文字も一文字として判断する」 という特性を利用して、外字文字列のコードを抽出したいのですが… 対象としたいテキスト文字数が80万字ほどあり(^^;、 この量をTEXTAREAへpasteしてJavascriptで一気に処理できるか? という点を知りたいのです。 まだテキストが手元にないので試せないのですが、 知識としてでも知ってる方がいたらお教え下さい。 ブラウザ環境はIE5.0+Winです。 要するにcsvテキストからシフトJISの0xF040~FFFCを含む行数を 抽出したいだけなので、perlで簡単な方法があればかまわないのですが…

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

さすがに80万文字っていうのは無理じゃないでしょうか。分割するにしても、いろいろと面倒そうですし、ご自分でも指摘していらっしゃるように、perlで簡単なスクリプトを作るのが現実的だと思います。 アルゴリズムとしては、 1. 1byte読み込む 2. ~0x7f、または0xa1~0xdfなら、1.へ 3. 0xf0~0xffなら、外字用処理を行った後、1.へ 4. それ以外なら、1byteカラ読みして、1.へ でいいでしょう。

izk13
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#25358
noname#25358
回答No.3

 補足みました。  NNは2バイト文字を1文字としては扱いません(^_^; これはIEだけの仕様です。  IEは内部でUNICODEを使用しており、全角半角に関わらずすべての文字を2バイトコードとして扱っています。これが、全角と半角を両方とも1文字として扱える正体です。  NNは内部でUNICODEを使用していないので、2バイト文字は飽くまで2文字なのです。  ま、NNは使わないということであれば関係ないですね。  ちなみにもうプログラムはJavaScriptで書かれたのでしょうか。 処理重くないですか?

izk13
質問者

補足

プログラムは「桐」というDBソフトに 外字検出関数という便利なモノがあったのでそれを使うことになりました(^^; NNの話ですが、4.75では a = "あああ".length; としたときに「3」と返します。 ちなみに4.01では「6」です。さらに、 A = "庁".charCodeAt(0); などとしたときも、4.75ではIEと同じく「24193」と表示します。 ちなみにNN4.01では「-110」と表示されます。 NNはバージョンによって2バイト文字の判定が違うと思います。

すると、全ての回答が全文表示されます。
noname#25358
noname#25358
回答No.1

 えーとですね。  2バイト文字を1文字として数えるのはIEが昔からやってきたことで、NNでは逆に今でも2バイト文字は2文字です。  ですのでJavaScriptでやるのであればその辺の区分けが必要です。  Perl でできるんだったら Perl の方が簡単ですよ(^_^; わざわざ苦労することもないです。IEとNNの区分けも面倒ですし。  Perl では、文字列をシフトJISに変換したのち、   if ( $st =~ /([\xF0-\xFF][\x40-\xFC])/ )  おそらくはこれで、文字列$stの中に外字が含まれているかどうかが判別できるはずです。上記のif文では、$st に外字が含まれていればtrueを、そうでなければfalseを返します。  たしか。  正規表現はあんまし使わないので自信はないです。何度かテストしてみてください。

izk13
質問者

補足

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

すると、全ての回答が全文表示されます。

関連するQ&A