- ベストアンサー
全角空白での文字列分割について
教えてください。 以下のような文字列で、全角空白をキーに2つに分割したいと考えています。 テストテキスト テストテストテスト スクリプトの文字コードはshiftJISで、分割対象の文字列もshiftJISです。 use encoding "shiftjis"; としてます。 ($t1,$t2) = split(/ /, $t); として試してみましたが、やはり無理でした。 何か良い方法がありましたら、教えてください。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1>open ( IN, '<:encoding(shiftjis)', "target_text.txt") ; を使ってやってもOKでした。 逆に、'<:encoding(shiftjis)' を省略すると、仰るような結果になるので、 use encoding "shiftjis"; が、うまく機能していないのかなと思います。 use encoding "Shift_jis"; use encoding "cp932"; use encoding "UTF-8"; などを試してみたらどうなりますか? どうも、スクリプトの実際の文字コードがシフトJISではないのではないかと思います。例えばUTF-8とか (読み込むファイルの方は仰るように変換時に指定コードと違う場合はエラーメッセージがでますので、でないということは、シフトJISで間違いないと思います)
その他の回答 (3)
- bgbg
- ベストアンサー率53% (94/175)
Perlのバージョンはどうなっていますか? 5.8.0でShiftJISの文字がうまく処理されないというバグがありました。 もしバージョンが5.8.0なら、バージョンアップをしましょう。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ウチでも試してみましたが、 うまく分割できましたよ。 全角空白が複数あるとかそういうことでしょうか?
補足
回答ありがとうございます。 全角空白の数は1つです。連続して2つ以上出現しない仕様になっています。
- Tacosan
- ベストアンサー率23% (3656/15482)
ん~, 手元 (perl 5.8.8) だと #!/usr/local/bin/perl use encoding 'shiftjis'; $t = "aaa bbb"; ($t1, $t2) = split(/ /, $t); print "$t1 $t2\n"; できちんと動いてるんですけど.... 「無理」ってのは, どういうことをさしているんでしょうか? あと, 「正しいデータが入力されているのか」も要チェックかな.
補足
回答ありがとうございます。 すみません。重要な点を書き忘れていました。 分割対象のテキストは外部からインターネット経由で取ってくるテキストです。 GETしたのち、 open ( IN, '<:encoding(shiftjis)', "target_text.txt") ; としてエンコーディングしています。取ってくる元のファイル(ここではtarget_text.txt)はshiftJISです。 実はこの部分も自信がありません。 スクリプト本文もshiftJISなので、この記述は不要では?と最初思ったのですが、動かしてみると文字化けを起こすのでやむなく入れています。 この記述で一応ちゃんと動いているようですが、、、 「無理」と書いたのは、空白全角が無視されてしまうということです。 $t = "サンプルテキスト テストテスト"; ($t1,$t2) = split(/ /,$t); だとすると、$t1に"サンプルテキスト テストテスト"と代入され、$t2は空になります。 '<:encoding(shiftjis)', で正しいかどうかは自信がありませんが、化けずに表示されるので、「正しい」データだと思いますが、、、、 引き続き、よろしくお願いします。
補足
バージョンは5.8.7です。 すみません。これも書き忘れてました。