fixed GH #2364: Stringify escapes every unicode symbol when object contain an array

This commit is contained in:
Günter Obiltschnig 2019-06-22 14:27:31 +02:00
parent 1f65d15ac5
commit f581d8a256
3 changed files with 20 additions and 17 deletions

View File

@ -216,7 +216,7 @@ private:
inline void Array::setEscapeUnicode(bool escape)
{
_escapeUnicode = true;
_escapeUnicode = escape;
}

View File

@ -296,7 +296,7 @@ private:
inline void Object::setEscapeUnicode(bool escape)
{
_escapeUnicode = true;
_escapeUnicode = escape;
}

View File

@ -1938,26 +1938,29 @@ void JSONTest::testEscape0()
void JSONTest::testNonEscapeUnicode()
{
std::string chinese("{ \"name\" : \"\\u4e2d\" }");
std::string chinese("{\"arr\":[{ \"name\" : \"\\u4e2d\" }]}");
Poco::JSON::Parser parser(new Poco::JSON::ParseHandler());
Var result = parser.parse(chinese);
assert(result.type() == typeid(Object::Ptr));
Object::Ptr object = result.extract<Object::Ptr>();
object->setEscapeUnicode(false);
std::stringstream ss;
object->stringify(ss);
assert(ss.str().compare("{\"name\":\"\xE4\xB8\xAD\"}") == 0);
assert (ss.str().compare("{\"arr\":[{\"name\":\"\xE4\xB8\xAD\"}]}") == 0);
const unsigned char utf8Chars[] = {'{', '"', 'n', 'a', 'm', 'e', '"', ':',
'"', 'g', 0xC3, 0xBC, 'n', 't', 'e', 'r', '"', '}', 0};
const unsigned char utf8Chars[] = {'{', '"', 'a', 'r', 'r', '"', ':', '[', '{', '"', 'n', 'a', 'm', 'e', '"', ':',
'"', 'g', 0xC3, 0xBC, 'n', 't', 'e', 'r', '"', '}', ']', '}', 0};
std::string utf8Text((const char*) utf8Chars);
parser.reset();
result = parser.parse(utf8Text);
object = result.extract<Object::Ptr>();
object->setEscapeUnicode(false);
ss.str(""); object->stringify(ss);
assert (ss.str() == "{\"name\":\"g\xC3\xBCnter\"}");
assert (ss.str() == "{\"arr\":[{\"name\":\"g\xC3\xBCnter\"}]}");
Poco::JSON::Object obj1;
std::string shortEscapeStr("String with \t");