From e255ce31a42cd57050bc69f9384aefb310714d21 Mon Sep 17 00:00:00 2001 From: Christopher Dunn Date: Sat, 11 Apr 2015 13:23:52 -0500 Subject: [PATCH] support UTF-8 in old Writers We had already fixed Value to hold UTF-8 properly, but only the newer StreamWriter was writing UTF-8 properly. Old FasterWriter etc. were using asCString() instead of asString() in Value::writeValue(). Hopefully this change does not break any existing code. Seems unlikely. issue #240 --- src/lib_json/json_writer.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp index ef976bfab..66ca21727 100644 --- a/src/lib_json/json_writer.cpp +++ b/src/lib_json/json_writer.cpp @@ -317,8 +317,14 @@ void FastWriter::writeValue(const Value& value) { document_ += valueToString(value.asDouble()); break; case stringValue: - document_ += valueToQuotedString(value.asCString()); + { + // Is NULL possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) document_ += valueToQuotedStringN(str, static_cast(end-str)); break; + } case booleanValue: document_ += valueToString(value.asBool()); break; @@ -382,7 +388,7 @@ void StyledWriter::writeValue(const Value& value) { break; case stringValue: { - // Is NULL is possible for value.string_? + // Is NULL possible for value.string_? char const* str; char const* end; bool ok = value.getString(&str, &end); @@ -599,8 +605,15 @@ void StyledStreamWriter::writeValue(const Value& value) { pushValue(valueToString(value.asDouble())); break; case stringValue: - pushValue(valueToQuotedString(value.asCString())); + { + // Is NULL possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast(end-str))); + else pushValue(""); break; + } case booleanValue: pushValue(valueToString(value.asBool())); break;