diff OrthancServer/FromDcmtkBridge.cpp @ 1695:18c02c6987d5

fix for encodings
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 08 Oct 2015 14:34:19 +0200
parents 06d579e82bb8
children a001f6226c7c
line wrap: on
line diff
--- a/OrthancServer/FromDcmtkBridge.cpp	Thu Oct 08 13:49:20 2015 +0200
+++ b/OrthancServer/FromDcmtkBridge.cpp	Thu Oct 08 14:34:19 2015 +0200
@@ -1146,17 +1146,23 @@
 
   void FromDcmtkBridge::FillElementWithString(DcmElement& element,
                                               const DicomTag& tag,
-                                              const std::string& value,
-                                              bool decodeBinaryTags)
+                                              const std::string& utf8Value,
+                                              bool decodeBinaryTags,
+                                              Encoding dicomEncoding)
   {
     std::string binary;
-    const std::string* decoded = &value;
+    const std::string* decoded = &utf8Value;
 
     if (decodeBinaryTags &&
-        boost::starts_with(value, "data:application/octet-stream;base64,"))
+        boost::starts_with(utf8Value, "data:application/octet-stream;base64,"))
     {
       std::string mime;
-      Toolbox::DecodeDataUriScheme(mime, binary, value);
+      Toolbox::DecodeDataUriScheme(mime, binary, utf8Value);
+      decoded = &binary;
+    }
+    else if (dicomEncoding != Encoding_Utf8)
+    {
+      binary = Toolbox::ConvertFromUtf8(utf8Value, dicomEncoding);
       decoded = &binary;
     }
 
@@ -1312,7 +1318,8 @@
 
   DcmElement* FromDcmtkBridge::FromJson(const DicomTag& tag,
                                         const Json::Value& value,
-                                        bool decodeBinaryTags)
+                                        bool decodeBinaryTags,
+                                        Encoding dicomEncoding)
   {
     std::auto_ptr<DcmElement> element;
 
@@ -1320,7 +1327,7 @@
     {
       case Json::stringValue:
         element.reset(CreateElementForTag(tag));
-        FillElementWithString(*element, tag, value.asString(), decodeBinaryTags);
+        FillElementWithString(*element, tag, value.asString(), decodeBinaryTags, dicomEncoding);
         break;
 
       case Json::arrayValue:
@@ -1341,7 +1348,7 @@
           Json::Value::Members members = value[i].getMemberNames();
           for (Json::Value::ArrayIndex j = 0; j < members.size(); j++)
           {
-            item->insert(FromJson(ParseTag(members[j]), value[i][members[j]], decodeBinaryTags));
+            item->insert(FromJson(ParseTag(members[j]), value[i][members[j]], decodeBinaryTags, dicomEncoding));
           }
 
           sequence->append(item.release());