QuotedPrintableをデコードしてstringで取得します。
#include <stdio.h> #include <tchar.h> #include <locale.h> #include <string> #include <iostream> const static char* g_cpHex = "0123456789ABCDEF"; /* QuotedPrintableデコード */ std::string DecodeQuotedPrintable ( std::string oStr ) { std::string oRet; std::string::iterator ite = oStr.begin(); std::string::iterator iteEnd = oStr.end(); // 全データを巡回 while( ite != iteEnd ) { // 1データ取得 unsigned char bChar = *ite++; // 変換 if ( '=' != bChar ) { oRet += bChar; } else { unsigned bHex; bChar = *ite++; if ( '¥r' == bChar ) { // '¥n'読み飛ばし bChar = *ite++; } if ( '¥n' == bChar ) { // '¥n'読み飛ばし continue; } if ( '0' <= bChar && '9' >= bChar ) { bHex = bChar - '0'; } else if ( 'A' <= bChar && 'F' >= bChar ) { bHex = bChar - 'A' + 10; } else if ( 'a' <= bChar && 'f' >= bChar ) { bHex = bChar - 'a' + 10; } bHex *= 16; bChar = *ite++; if ( '0' <= bChar && '9' >= bChar ) { bHex += bChar - '0'; } else if ( 'A' <= bChar && 'F' >= bChar ) { bHex += bChar - 'A' + 10; } else if ( 'a' <= bChar && 'f' >= bChar ) { bHex += bChar - 'a' + 10; } oRet += bHex; } } // 結果を返す return( oRet ); } int _tmain ( int argc , _TCHAR* argv[] ) { // 標準出力にユニコード出力する setlocale( LC_ALL, "Japanese" ); std::string str = "=51=75=6F=74=65=64=50=72=69=6E=74=61=62=6C=65"; std::cout << "■変換前" << std::endl; std::cout << str << std::endl; std::cout << std::endl; // QuotedPrintableをデコードする str = DecodeQuotedPrintable( str ); // 標準出力へ出力する std::cout << "■変換後" << std::endl; std::cout << str << std::endl; // 正常終了 return( 0 ); }
■変換前
=51=75=6F=74=65=64=50=72=69=6E=74=61=62=6C=65
■変換後
QuotedPrintable