From: Yoshida Masato Date: 1999-06-24T11:50:41+09:00 Subject: [ruby-dev:7205] Re: pack/unpack よしだです Tadayoshi Funaba writes: > pack/unpack で UTF8 がちょっと違うみたいです。だいたいこんな感じかなあ > と思うんですが、 uv_to_utf8() の最後のあたりよくわからなかったです。余 > 計な修正してるかも。 ふなばさんのパッチでも,pack したときにちゃんとした UTF-8 に ならないようです。 --- pack.c.org Thu Jun 24 11:26:48 1999 +++ pack.c Thu Jun 24 11:02:51 1999 @@ -1597,47 +1597,47 @@ } if (uv <= 0x7ff) { buf[0] = ((uv>>6)&0xff)|0xc0; - buf[1] = uv&0x3f; + buf[1] = (uv&0x3f)|0x80; return 2; } if (uv <= 0xffff) { buf[0] = ((uv>>12)&0xff)|0xe0; - buf[1] = (uv>>6)&0x3f; - buf[2] = uv&0x3f; + buf[1] = ((uv>>6)&0x3f)|0x80; + buf[2] = (uv&0x3f)|0x80; return 3; } if (uv <= 0x1fffff) { buf[0] = ((uv>>18)&0xff)|0xf0; - buf[1] = (uv>>12)&0x3f; - buf[2] = (uv>>6)&0x3f; - buf[3] = uv&0x3f; + buf[1] = ((uv>>12)&0x3f)|0x80; + buf[2] = ((uv>>6)&0x3f)|0x80; + buf[3] = (uv&0x3f)|0x80; return 4; } if (uv <= 0x3ffffff) { buf[0] = ((uv>>24)&0xff)|0xf8; - buf[1] = (uv>>18)&0x3f; - buf[2] = (uv>>12)&0x3f; - buf[3] = (uv>>6)&0x3f; - buf[4] = uv&0x3f; + buf[1] = ((uv>>18)&0x3f)|0x80; + buf[2] = ((uv>>12)&0x3f)|0x80; + buf[3] = ((uv>>6)&0x3f)|0x80; + buf[4] = (uv&0x3f)|0x80; return 5; } if (uv <= 0x7fffffff) { buf[0] = ((uv>>30)&0xff)|0xfc; - buf[1] = (uv>>24)&0x3f; - buf[2] = (uv>>18)&0x3f; - buf[3] = (uv>>12)&0x3f; - buf[4] = (uv>>6)&0x3f; - buf[5] = uv&0x3f; + buf[1] = ((uv>>24)&0x3f)|0x80; + buf[2] = ((uv>>18)&0x3f)|0x80; + buf[3] = ((uv>>12)&0x3f)|0x80; + buf[4] = ((uv>>6)&0x3f)|0x80; + buf[5] = (uv&0x3f)|0x80; return 6; } /* if (uv <= 0xfffffffff) */ { buf[0] = 0xfe; - buf[1] = (uv>>30)&0x3f; - buf[2] = (uv>>24)&0x3f; - buf[3] = (uv>>18)&0x3f; - buf[4] = (uv>>12)&0x3f; - buf[5] = (uv>>6)&0x3f; - buf[6] = uv&0x3f; + buf[1] = ((uv>>30)&0x3f)|0x80; + buf[2] = ((uv>>24)&0x3f)|0x80; + buf[3] = ((uv>>18)&0x3f)|0x80; + buf[4] = ((uv>>12)&0x3f)|0x80; + buf[5] = ((uv>>6)&0x3f)|0x80; + buf[6] = (uv&0x3f)|0x80; return 7; } buf[0] = uv>>BYTEWIDTH; -- 吉田正人 INS エンジニアリング(株) 事業開拓室 yoshidam@inse.co.jp yoshidam@yoshidam.net