• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字の数え方)

文字の数え方

このQ&Aのポイント
  • 文字の数え方について、Perlのコードを使用して説明します。
  • utf8フラグを宣言すると、多バイト文字でも1文字を1とカウントし、コメントを外すと異なる結果になります。
  • utf8フラグが立っていない場合、多バイト文字も2文字としてカウントされます。

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

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.1

最初の 71 は、UTF-8表現の "最初にUTF-8で表示します。次にshift-JISで表示します。" のバイト数でしょう。 (日本語文字は、3バイト) その直後の encode() は、きっと正常に動いてないです。 use utf8; してる時の encode("shiftjis",encode("utf8",$str)); と同じはずですから。 この事を、その結果の length より先に考えましょうよ。 1行目に -w を追加したら、 STDERR に何か出ないですか?

makoji
質問者

お礼

確かに  use utf8; を外した  $str=encode("shiftjis",$str); は文字化けを起こしているようです。  use utf8; を外した場合にどういう式を書けばいいのか、2~3、試したのですが駄目でした。 でも  use utf8; を宣言すればそれで済むことですから、これ以上突っ込むのは止めました。 面白いと思ったのは、シュパングに-wを付けて実行したら、警告が出たのはUTF-8の文字列の方だったこと。  my $encoded_str=encode("utf8",$str); としてUTF8フラグを外したらOKです。 ありがとうございました。

関連するQ&A