12   IconvCD(
const std::string& fromcode, 
const std::string& tocode)
 
   14     cd = iconv_open(tocode.c_str(), fromcode.c_str());
 
   29     (lang.find(
"jp") != lang.npos || lang.find(
"JP") != lang.npos)
 
   30     && (lang.find(
"euc") != lang.npos || lang.find(
"EUC") != lang.npos);
 
   33   const bool shift_jis =
 
   34     (lang.find(
"sjis") != lang.npos || lang.find(
"SJIS") != lang.npos);
 
   38     (lang.find(
"UTF-8") != lang.npos || lang.find(
"UTF8") != lang.npos);
 
   47   static const char *lang = getenv(
"LANG");
 
   50   static const std::string tocode = langToIconvCode(lang);
 
   53   if (
"EUC-JP" == tocode)
 
   61                       const std::string& tocode,
 
   62                       const std::string& src)
 
   64   if (fromcode == tocode)
 
   73   const char * inbuf = src.c_str();
 
   74   char outbuf[1024], *outbufptr = outbuf;
 
   75   size_t inbytesleft = src.size(), outbytesleft = 1024;
 
   76 #if (defined __linux__ || defined __APPLE__) 
   77   typedef char ** iconv_inbuf_t;
 
   79   typedef const char ** iconv_inbuf_t;
 
   83   while ((success = iconv(cd.
cd, (iconv_inbuf_t)&inbuf, &inbytesleft, 
 
   84                           &outbufptr, &outbytesleft)) >= 0
 
   86     if (outbufptr - outbuf >= 512)
 
   88       ret += std::string(outbuf, outbufptr);
 
   93   ret += std::string(outbuf, outbufptr);