• ベストアンサー

javascript全角・半角混在文字列を分割する

javascriptで困っています。宜しくお願いします。エンコードはutf-8です str = "鈴木 茂\t小松商事\t部長"; (ただし、strはtext fileから読み込んだものであり、\tと表記していません。タブで区切られています。) token = str.split("\t"); これで、token[0] = "鈴木 茂", token[1] = "小松商事", token[2] = "部長"となることを期待しているのですが、どうやら 全角文字の中の0x09で分割されてしまい、意図するようになりません。 ご指導頂ければ幸いです。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

ファイルから読み込む手段はどうやっていますか? FileSystemObjectのOpenTextFile、ReadLineだと UTF-8のデータは正しく扱えません。 こういう場合はADODB.Streamを使います。 var utf8 = new ActiveXObject("ADODB.Stream"); utf8.Open(); utf8.Type = 2; //テキストモード utf8.Charset = "utf-8"; //文字コード utf8.LoadFromFile("D:\\okvbs\\pm.txt"); //読み込み var ansi = new ActiveXObject("ADODB.Stream"); ansi.Open(); ansi.Type = 2; //テキストモード ansi.Charset = "shift_jis"; //文字コード utf8.CopyTo(ansi); //転送(文字コード変換含む) utf8.Close(); ansi.Position = 0; //ポインタをファイル先頭に移動 var str = ansi.ReadText(); //全てのデータを読み込む 後は今までのコーディングの通りです。 尚、ADODB.Streamでは復帰改行までの1行読み込みは 出来ないので、複数行の処理を1行ずつ行う場合には ReadText(1)として1文字ずつ読み込み、復帰改行を 検出したら、そこまで読み込んだ文字を連結して1行と するような工夫が必要です。

Radialist
質問者

お礼

早速のご回答ありがとうございました。ファイル読み込みは、prototype.jsのAjax.requireで行っています。 ただ、この質問をさせて頂いた後、再度気を取り直し、挑みましたところ、なんと今度はきちんと\t文字でsplitされ、解決されました。 どうやらご指摘の一部にもありますように、ファイルの文字コードが異なっていた可能性があります。 お忙しいところ、本当にありがとうございました。今後ともご指導宜しくお願いします。

関連するQ&A