diff options
Diffstat (limited to 'libqpdf/QPDF_Dictionary.cc')
-rw-r--r-- | libqpdf/QPDF_Dictionary.cc | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/libqpdf/QPDF_Dictionary.cc b/libqpdf/QPDF_Dictionary.cc index 942e6d9e..f7e32fc9 100644 --- a/libqpdf/QPDF_Dictionary.cc +++ b/libqpdf/QPDF_Dictionary.cc @@ -3,6 +3,7 @@ #include <qpdf/QPDFObject_private.hh> #include <qpdf/QPDF_Name.hh> #include <qpdf/QPDF_Null.hh> +#include <qpdf/QUtil.hh> using namespace std::literals; @@ -72,9 +73,19 @@ QPDF_Dictionary::getJSON(int json_version) JSON j = JSON::makeDictionary(); for (auto& iter: this->items) { if (!iter.second.isNull()) { - std::string key = - (json_version == 1 ? QPDF_Name::normalizeName(iter.first) : iter.first); - j.addDictionaryMember(key, iter.second.getJSON(json_version)); + if (json_version == 1) { + j.addDictionaryMember( + QPDF_Name::normalizeName(iter.first), iter.second.getJSON(json_version)); + } else { + bool has_8bit_chars; + bool is_valid_utf8; + bool is_utf16; + QUtil::analyze_encoding(iter.first, has_8bit_chars, is_valid_utf8, is_utf16); + std::string key = !has_8bit_chars || is_valid_utf8 + ? iter.first + : "n:" + QPDF_Name::normalizeName(iter.first); + j.addDictionaryMember(key, iter.second.getJSON(json_version)); + } } } return j; |