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