Hidetaka Iwai
tyuyu****@debia*****
2005年 5月 2日 (月) 20:32:25 JST
岩井です。 Hidetaka Iwai <tyuyu****@debia*****> wrote: Message-ID: <20050****@debia*****> > KANOU Hiroki <kanou****@khdd*****> wrote: > Message-ID: <20050****@lists*****> > (snip) > > RFC2152 をざっと確認してみました。、エンコードする場合は 3 バイト と > > 先頭の '+' で最大4 バイト (サロゲートペアは個別にエンコード)、 '-' が > > 必要なのは "--" ('-' を表す。エンコード部の直後の '-' はデコード時に > > 除去される) と"+-" ('+' を表す) の場合のみだそうです。 > > 現在の実装でも文字列末尾に '-' をつけてはいないので、unichar_t の字数の > > 4 倍のバイト数を確保すれば十分だと思います。 > > なるほど、御教授ありがとうございます。4 倍で十分なのですね。 これなんですが、現在の utf7_u_strcpy の実装だと、 if ( ubuf!=NULL ) while ( (ch = *ubuf++)!='\0' ) { を抜けた後の残りの文字の処理で、 残りが 8 ビットまたは 16 ビット分しか なくても、シフトして 24 ビットにしてから 6 ビットずつ 4 バイト書き込む ので、utf7_u_strcpy に渡された ubuf が 1文字の非アスキー文字であれば、 最初の'+' と合わせてやはり 5 バイト必要になってしまうようです。 utf7_enc を残りのビット数に応じて処理を変えるよう変更するか、富豪的に u2utf7_copy で 5倍確保する必要があると思います。 regards, -- Hidetaka Iwai tyuyu****@debia*****