Mercurial > hg > orthanc
comparison 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 |
comparison
equal
deleted
inserted
replaced
1694:06d579e82bb8 | 1695:18c02c6987d5 |
---|---|
1144 | 1144 |
1145 | 1145 |
1146 | 1146 |
1147 void FromDcmtkBridge::FillElementWithString(DcmElement& element, | 1147 void FromDcmtkBridge::FillElementWithString(DcmElement& element, |
1148 const DicomTag& tag, | 1148 const DicomTag& tag, |
1149 const std::string& value, | 1149 const std::string& utf8Value, |
1150 bool decodeBinaryTags) | 1150 bool decodeBinaryTags, |
1151 Encoding dicomEncoding) | |
1151 { | 1152 { |
1152 std::string binary; | 1153 std::string binary; |
1153 const std::string* decoded = &value; | 1154 const std::string* decoded = &utf8Value; |
1154 | 1155 |
1155 if (decodeBinaryTags && | 1156 if (decodeBinaryTags && |
1156 boost::starts_with(value, "data:application/octet-stream;base64,")) | 1157 boost::starts_with(utf8Value, "data:application/octet-stream;base64,")) |
1157 { | 1158 { |
1158 std::string mime; | 1159 std::string mime; |
1159 Toolbox::DecodeDataUriScheme(mime, binary, value); | 1160 Toolbox::DecodeDataUriScheme(mime, binary, utf8Value); |
1161 decoded = &binary; | |
1162 } | |
1163 else if (dicomEncoding != Encoding_Utf8) | |
1164 { | |
1165 binary = Toolbox::ConvertFromUtf8(utf8Value, dicomEncoding); | |
1160 decoded = &binary; | 1166 decoded = &binary; |
1161 } | 1167 } |
1162 | 1168 |
1163 DcmTag key(tag.GetGroup(), tag.GetElement()); | 1169 DcmTag key(tag.GetGroup(), tag.GetElement()); |
1164 | 1170 |
1310 } | 1316 } |
1311 | 1317 |
1312 | 1318 |
1313 DcmElement* FromDcmtkBridge::FromJson(const DicomTag& tag, | 1319 DcmElement* FromDcmtkBridge::FromJson(const DicomTag& tag, |
1314 const Json::Value& value, | 1320 const Json::Value& value, |
1315 bool decodeBinaryTags) | 1321 bool decodeBinaryTags, |
1322 Encoding dicomEncoding) | |
1316 { | 1323 { |
1317 std::auto_ptr<DcmElement> element; | 1324 std::auto_ptr<DcmElement> element; |
1318 | 1325 |
1319 switch (value.type()) | 1326 switch (value.type()) |
1320 { | 1327 { |
1321 case Json::stringValue: | 1328 case Json::stringValue: |
1322 element.reset(CreateElementForTag(tag)); | 1329 element.reset(CreateElementForTag(tag)); |
1323 FillElementWithString(*element, tag, value.asString(), decodeBinaryTags); | 1330 FillElementWithString(*element, tag, value.asString(), decodeBinaryTags, dicomEncoding); |
1324 break; | 1331 break; |
1325 | 1332 |
1326 case Json::arrayValue: | 1333 case Json::arrayValue: |
1327 { | 1334 { |
1328 DcmTag key(tag.GetGroup(), tag.GetElement()); | 1335 DcmTag key(tag.GetGroup(), tag.GetElement()); |
1339 std::auto_ptr<DcmItem> item(new DcmItem); | 1346 std::auto_ptr<DcmItem> item(new DcmItem); |
1340 | 1347 |
1341 Json::Value::Members members = value[i].getMemberNames(); | 1348 Json::Value::Members members = value[i].getMemberNames(); |
1342 for (Json::Value::ArrayIndex j = 0; j < members.size(); j++) | 1349 for (Json::Value::ArrayIndex j = 0; j < members.size(); j++) |
1343 { | 1350 { |
1344 item->insert(FromJson(ParseTag(members[j]), value[i][members[j]], decodeBinaryTags)); | 1351 item->insert(FromJson(ParseTag(members[j]), value[i][members[j]], decodeBinaryTags, dicomEncoding)); |
1345 } | 1352 } |
1346 | 1353 |
1347 sequence->append(item.release()); | 1354 sequence->append(item.release()); |
1348 } | 1355 } |
1349 | 1356 |