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