- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バイト列の定義について)
バイト列の定義について
このQ&Aのポイント
- バイト列の定義について質問があります。データの文字数を一定の数字で省こうと思っているのですが、UTF-8用のバイト列の定義を変更して、SJISに対応させたいです。
- 現在は、指定した文字数まで表示し、後は省略するプログラムを使っています。具体的には、1バイト文字、2バイト文字、3バイト文字、4バイト以上の文字を区別して、文字数を制限しています。
- ただ、$****に入っている文字列を10文字以降は省略したいと考えています。どのように変更すれば良いのかアドバイスをいただけないでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
そもそもやりたいことは「一定の文字数で切る」ことなんでしょう? だとしたら, 「文字」の世界で考えるべきであって, 「バイト列」なんてものを持ち出すのは混乱の本でしかありません. で今の Perl で一番簡単なのは #1 にあるように Encode::decode→s///→Encode::encode とやること. これなら「バイト列」なんて厄介なものを持ち出すことなく「文字」の世界だけで完結します. ちなみに今の Perl なら s/// は $str =~ s/^.{$view}\K.+/.../; の方が効率よさそう. 余談ですが, 当然 g は不要ですね>#1.
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
回答No.1
Shift_JISの文字コード表とかを見れば、1バイト文字、2バイト文字の範囲がわかると思います。 http://charset.7jp.net/sjis.html あと、最近のならdecode→s/^(.{$view}).+/$1/;→encodeがいいかも。 ところで、 > $str =~ s/^(($one|$two|$three|$bigger){$view}).+/$1.../g; ここでgいりますか?
質問者
お礼
勉強になりました。 記入されたサイトを元に勉強します。 ありがとうございました!
お礼
勉強になりました。 有り難うございます!