2005年08月30日(火) [過去の今日]
#1 perlのlength()とUnicode
ハマったハマった。
Note the characters: if the EXPR is in Unicode, you will get the number of characters, not the number of bytes. To get the length in bytes, use "do { use bytes; length(EXPR) }", see bytes.
Unicodeと書いてあるが、たぶんこれは識別コードが付いた状態のことだろう。このコードが付いてるとバイト数ではなく文字数を帰す、と。
これだとバイト数を指定しなきゃいけない関数に渡すときに非常に困るので、
length(Encode::encode('utf8', $hoge));
みたいにしてやらないといけない。めんどースギ。これはバイト数だと思い込んで処理しちゃう関数側が悪いのかなあ。
(@433)
@ ちなみにハマった関数ってのは:
XML::LibXML::Text->replaceData() ってやつ。offset, length, stringを渡してやらないといけないのよね。replaceDataSTringは旧データを渡さなきゃいけないし、めんどいなあ。
(@439)
放送データがファームウェアをぶっ壊しちゃったんだとさ。あーあ。
というか、これは構造が悪いんじゃないかね? 電子署名なんかを添付してファイルの完全性と送信者をきちんと確認してからアップデートにかかるようにすればよかったんじゃないのか? そういうのをテレビに組み込むのは無理なのか?
今後、テレビのセキュリティホールが出現すると著者は予言してるが、この状況ではそれは近く実現してしまうだろうなあ。
ま、総務省と天下り団体のいいなりになってデジタルテレビなんぞ買わなくても、他にいくらでもコンテンツはある。CSなりインターネットなりに転換すればよろしい。
(@664)