From 4ef66a69501ef29e6d6a97715ee1f7ba17033c05 Mon Sep 17 00:00:00 2001 From: Ykkrosh Date: Fri, 4 Nov 2011 01:18:34 +0000 Subject: [PATCH] Provide JSON-compatible string escaping This was SVN commit r10464. --- source/network/StringConverters.h | 2 +- source/ps/CStr.cpp | 21 +++++++++++---------- source/ps/CStr.h | 4 ++-- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/source/network/StringConverters.h b/source/network/StringConverters.h index 973cbf2fa0..4003ce7dd8 100644 --- a/source/network/StringConverters.h +++ b/source/network/StringConverters.h @@ -32,7 +32,7 @@ static inline CStr NetMessageStringConvert(const CStr8& arg) static inline CStr NetMessageStringConvert(const CStrW& arg) { - return arg.ToUTF8().EscapeToPrintableASCII(); + return arg.EscapeToPrintableASCII(); } #endif diff --git a/source/ps/CStr.cpp b/source/ps/CStr.cpp index daf1650ca4..dda0c0be28 100644 --- a/source/ps/CStr.cpp +++ b/source/ps/CStr.cpp @@ -356,25 +356,26 @@ CStr CStr::UnescapeBackslashes() const return NewString; } -CStr CStr::EscapeToPrintableASCII() const +CStr8 CStr::EscapeToPrintableASCII() const { - CStr NewString; + CStr8 NewString; for (size_t i = 0; i < length(); i++) { tchar ch = (*this)[i]; - if (ch == '"') - NewString += _T("\\\""); - else if (ch == '\\') - NewString += _T("\\\\"); - else if (ch == '\n') - NewString += _T("\\n"); + if (ch == '"') NewString += "\\\""; + else if (ch == '\\') NewString += "\\\\"; + else if (ch == '\b') NewString += "\\b"; + else if (ch == '\f') NewString += "\\f"; + else if (ch == '\n') NewString += "\\n"; + else if (ch == '\r') NewString += "\\r"; + else if (ch == '\t') NewString += "\\t"; else if (ch >= 32 && ch <= 126) NewString += ch; else { - std::tstringstream ss; - ss << _T("\\x") << std::hex << std::setfill(_T('0')) << std::setw(2) << (int)(unsigned char)ch; + std::stringstream ss; + ss << "\\u" << std::hex << std::setfill('0') << std::setw(4) << (int)(unsigned char)ch; NewString += ss.str(); } } diff --git a/source/ps/CStr.h b/source/ps/CStr.h index f910edf8ff..3073f373ac 100644 --- a/source/ps/CStr.h +++ b/source/ps/CStr.h @@ -311,9 +311,9 @@ public: CStr UnescapeBackslashes() const; /** - * Convert strings to printable ASCII characters with C-style escapes + * Convert strings to printable ASCII characters with JSON-style escapes. */ - CStr EscapeToPrintableASCII() const; + CStr8 EscapeToPrintableASCII() const; /** * Return a trimmed copy of the CStr.