UTF-8のencode、decodeで小一時間悩む-CGI,Perl

先日、トップページをJavaScriptで自動書き換えするコードを公開しましたが、タイトルが長い場合にレイアウトを崩してしまう現象が発生しました。

回避するためのコードを見つけるのにチョッと悩むw

UTF-8ベースだとlength、substrを使うと場合によっては文字化けしてしまう。

Win2000からは、UNICODEが標準とされたため、今まで作ってたEUCベースから転換しなければならないのかも。

少し脱線しましたが、UTF8を始めて扱って気が付いたんですが、EUC、SHIFT-JISは全角文字を2バイト、半角文字を1バイトで計算するだけど、UTF8で計算すると全角文字が3バイト、半角が1バイトなんだよね。

技術的な事はググってくださいw

要するに、

1111 は4バイト
あいうえお は15バイトになってしまうわけで・・・
あ1も 4バイト

バイト数で区切ってしまうと端数が出てきて文字化けするみたいですね。 もう少し研究してみます(汗)

そこで一旦、UTF-8をデコードして計算後にエンコードする方法をとってみました。

 

utf8::decode($str);

utf8::encode($str);

これで、バイト数ではなく文字数をカウントして、SubStr関数を使えば、文字数で区切ることが可能となります。

忘れないように記録しておこう。

参考サイト

以上!

コメント

タイトルとURLをコピーしました