summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFridrich Štrba <fridrich.strba@bluewin.ch>2021-03-22 16:25:38 +0100
committerFridrich Štrba <fridrich.strba@bluewin.ch>2021-03-22 16:25:38 +0100
commit9bbf5b653324ea567269b5ac18e09853dff4a0cd (patch)
tree83dfbff83b54421879f667748d84d24e748a3a86
parent0d36bda438c8c1e33ef9aada24a65d8bb8107c6c (diff)
Read the json as utf-8 for versions 17+
Change-Id: I4fa754ba03be06594e421de1d03be25aec0e5c1e
-rw-r--r--src/lib/CDRParser.cpp2
-rw-r--r--src/lib/libcdr_utils.cpp9
-rw-r--r--src/lib/libcdr_utils.h1
3 files changed, 11 insertions, 1 deletions
diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index 62bdf0d..045a1b9 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -3055,7 +3055,7 @@ void libcdr::CDRParser::_readX6StyleString(librevenge::RVNGInputStream *input, u
memcpy(&styleBuffer[0], tmpBuffer, numBytesRead);
librevenge::RVNGString styleString;
if (m_version >= 1700)
- libcdr::appendCharacters(styleString, styleBuffer, 0);
+ libcdr::appendUTF8Characters(styleString, styleBuffer);
else
libcdr::appendCharacters(styleString, styleBuffer);
CDR_DEBUG_MSG(("CDRParser::_readX6StyleString - styleString = \"%s\"\n", styleString.cstr()));
diff --git a/src/lib/libcdr_utils.cpp b/src/lib/libcdr_utils.cpp
index 250f0a0..c900b0a 100644
--- a/src/lib/libcdr_utils.cpp
+++ b/src/lib/libcdr_utils.cpp
@@ -462,6 +462,15 @@ void libcdr::appendCharacters(librevenge::RVNGString &text, std::vector<unsigned
ucnv_close(conv);
}
+void libcdr::appendUTF8Characters(librevenge::RVNGString &text, std::vector<unsigned char> characters)
+{
+ if (characters.empty())
+ return;
+
+ for (std::vector<unsigned char>::const_iterator iter = characters.begin(); iter != characters.end(); ++iter)
+ text.append((char)*iter);
+}
+
#ifdef DEBUG
void libcdr::debugPrint(const char *const format, ...)
diff --git a/src/lib/libcdr_utils.h b/src/lib/libcdr_utils.h
index a4472fc..52871e3 100644
--- a/src/lib/libcdr_utils.h
+++ b/src/lib/libcdr_utils.h
@@ -91,6 +91,7 @@ void writeU16(librevenge::RVNGBinaryData &buffer, const int value);
void writeU32(librevenge::RVNGBinaryData &buffer, const int value);
void appendCharacters(librevenge::RVNGString &text, std::vector<unsigned char> characters, unsigned short charset);
void appendCharacters(librevenge::RVNGString &text, std::vector<unsigned char> characters);
+void appendUTF8Characters(librevenge::RVNGString &text, std::vector<unsigned char> characters);
#ifdef DEBUG
const char *toFourCC(unsigned value, bool bigEndian=false);