フォーラム: 開発者 (スレッド #22263)

uri::encode 関連の問題 (2009-04-06 18:31 by cielquis #43009)

uri::encode に残っている問題.

uri::encode ではワード単位 (char, or wchar_t) で処理を行っているが,wchar_t を用いたときに問題が発生する.uri::encode は,予約文字(英数字および一部の記号)以外は % に続いて 2 文字の 16 進文字列で表現する事となっているが,現在の処理では wchar_t を用いた場合,2 文字以上(0xFF 以上の場合だと 4 文字)の 16 進文字列で表現されてしまう.

wchar_t の uri::encode では,ワード (wchar_t) 単位の処理ではなくバイト単位の処理にしなければならない.また,これに伴って uri::decode も適切に複数の 16 進文字列を繋げる必要がある.

RE: uri::encode 関連の問題 (2009-04-07 12:23 by cielquis #43032)

uri::encode の方は修正できるが,uri::decode の修正が難しい(文字コードを判別する必要がある,など)ので,当面は wchar_t 対応は行わない事とする.これに伴って,uri::encode/uri::decode の定義を以下にしておく.

変更前:

template <class Ch, class Tr>
inline std::basic_string<Ch, Tr> encode(
const std::basic_string<Ch, Tr>& src);

template <class Ch, class Tr>
inline std::basic_string<Ch, Tr> decode(
const std::basic_string<Ch, Tr>& src);

変更後:

inline std::basic_string<char> encode(
const std::basic_string<char>& src);

inline std::basic_string<char> decode(
const std::basic_string<char>& src);
#43009 への返信