- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字の数え方)
文字の数え方
このQ&Aのポイント
- 文字の数え方について、Perlのコードを使用して説明します。
- utf8フラグを宣言すると、多バイト文字でも1文字を1とカウントし、コメントを外すと異なる結果になります。
- utf8フラグが立っていない場合、多バイト文字も2文字としてカウントされます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
最初の 71 は、UTF-8表現の "最初にUTF-8で表示します。次にshift-JISで表示します。" のバイト数でしょう。 (日本語文字は、3バイト) その直後の encode() は、きっと正常に動いてないです。 use utf8; してる時の encode("shiftjis",encode("utf8",$str)); と同じはずですから。 この事を、その結果の length より先に考えましょうよ。 1行目に -w を追加したら、 STDERR に何か出ないですか?
お礼
確かに use utf8; を外した $str=encode("shiftjis",$str); は文字化けを起こしているようです。 use utf8; を外した場合にどういう式を書けばいいのか、2~3、試したのですが駄目でした。 でも use utf8; を宣言すればそれで済むことですから、これ以上突っ込むのは止めました。 面白いと思ったのは、シュパングに-wを付けて実行したら、警告が出たのはUTF-8の文字列の方だったこと。 my $encoded_str=encode("utf8",$str); としてUTF8フラグを外したらOKです。 ありがとうございました。