很奇怪的处理中文出现乱码有关问题

很奇怪的处理中文出现乱码问题
问题描述如下:
从网页中取到一个字符串,如:txt1=abc&txt2=123%E4%B8%AD%E5%9B%BD&iud=2&submit=submit

如果用cin.read(char*   content,len)赋值到content变量上,将变量输出后,在这个字符串的最后会多出一些额外的字符(不知是不是mod_fastcgi的Bug),但将这个变量放入解码函数中解码出来的中文是正确的。

如果这样:
ostringstream   oo;
oo.write(content,len);
cout   < <   oo.str();
未解码前的字符串是正确的,没有多出额外的字符。

但是,将oo.str().c_str()进行中文解码时出现中文乱码,又另外写了一个对string进行解码的函数,也解不出来。

请教c++高手,什么地方出的错?

解码函数见下:

  47                   void   Parser::getDecoded(map <string,string>   &m,   string   str)
  48                   {
  49                           vector <string>   vv;
  50                           string   oneSec;
  51
  52                           for(int   i=0;   i <str.size();   i++)
  53                           {
  54                                   char   ch   =   str[i];
  55
  56                                   switch(ch)
  57                                   {
  58                                           case   '% ':
  59                                                   char   c1   =   hex(str[i++]);
  60                                                   char   c2   =   hex(str[i++]);
  61                                                   ch   =   c1   *   16   +   c2;
  62                                                   break;
  63                                           case   '+ ':
  64                                                   ch   =   '   ';
  65                                                   break;
  66                                   }
  67
  68                                   if(ch   ==   '& ')