wstring中のjsonのエスケープ文字をエスケープします。
#include <stdio.h> #include <tchar.h> #include <iostream> #include <string> /* json文字列をエスケープする ESCAPED-CHAR = "¥”" / "¥¥" / "¥/" / "¥b" / "¥f" / "¥r" / "¥t" */ std::wstring EscapeJsonString ( std::wstring& oString ) { std::wstring oRet; std::wstring::iterator ite = oString.begin(); std::wstring::iterator iteEnd = oString.end(); while( ite != iteEnd ) { wchar_t wChar = *ite++; switch( wChar ) { case L'"': { oRet += L"¥¥¥""; } break; case L'¥¥': { oRet += L"¥¥¥¥"; } break; case L'/': { oRet += L"¥¥/"; } break; case '¥b': { oRet += L"¥¥b"; } break; case '¥f': { oRet += L"¥¥f"; } break; case '¥n': { oRet += L"¥¥n"; } break; case '¥r': { oRet += L"¥¥r"; } break; case '¥t': { oRet += L"¥¥t"; } break; default: oRet += wChar; break; } } return( oRet ); } /* JSONのエスケープ文字をエスケープする */ int _tmain ( int argc , _TCHAR* argv[] ) { /* std::wcoutのロケールを設定 これを設定するだけで、std::wcoutで日本語が表示される ようになります。 */ std::wcout.imbue( std::locale( "", std::locale::ctype ) ); // 変換対象の文字列 std::wstring strText = L"¥"string¥"-yen¥¥-/-¥b-¥f-¥r-¥t-test"; // JSON文字列のエスケープ std::wstring strResult = EscapeJsonString( strText ); // 変換結果を表示 std::wcout << strResult.c_str() << std::endl; // 正常終了 return( 0 ); }
\"string\"-yen\\-\/-\b-\f-\r-\t-test