Mercurial > hg > orthanc
diff OrthancServer/FromDcmtkBridge.cpp @ 956:2fd5a163776d
primitives for proper encoding handling
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 25 Jun 2014 16:08:47 +0200 |
parents | 766a57997121 |
children | 63973b76a51f |
line wrap: on
line diff
--- a/OrthancServer/FromDcmtkBridge.cpp Wed Jun 25 15:32:02 2014 +0200 +++ b/OrthancServer/FromDcmtkBridge.cpp Wed Jun 25 16:08:47 2014 +0200 @@ -115,8 +115,18 @@ GetCharValue(c[3])); } + + Encoding FromDcmtkBridge::DetectEncoding(DcmDataset& dataset) + { + // TODO Implement this! + return Encoding_Latin1; + } + + void FromDcmtkBridge::Convert(DicomMap& target, DcmDataset& dataset) { + Encoding encoding = DetectEncoding(dataset); + target.Clear(); for (unsigned long i = 0; i < dataset.card(); i++) { @@ -125,7 +135,7 @@ { target.SetValue(element->getTag().getGTag(), element->getTag().getETag(), - ConvertLeafElement(*element)); + ConvertLeafElement(*element, encoding)); } } } @@ -137,7 +147,8 @@ } - DicomValue* FromDcmtkBridge::ConvertLeafElement(DcmElement& element) + DicomValue* FromDcmtkBridge::ConvertLeafElement(DcmElement& element, + Encoding encoding) { if (!element.isLeaf()) { @@ -151,7 +162,7 @@ c != NULL) { std::string s(c); - std::string utf8 = Toolbox::ConvertToUtf8(s, Encoding_Latin1); // TODO Parameter? + std::string utf8 = Toolbox::ConvertToUtf8(s, encoding); return new DicomString(utf8); } else @@ -313,25 +324,28 @@ static void StoreElement(Json::Value& target, DcmElement& element, - unsigned int maxStringLength); + unsigned int maxStringLength, + Encoding encoding); static void StoreItem(Json::Value& target, DcmItem& item, - unsigned int maxStringLength) + unsigned int maxStringLength, + Encoding encoding) { target = Json::Value(Json::objectValue); for (unsigned long i = 0; i < item.card(); i++) { DcmElement* element = item.getElement(i); - StoreElement(target, *element, maxStringLength); + StoreElement(target, *element, maxStringLength, encoding); } } static void StoreElement(Json::Value& target, DcmElement& element, - unsigned int maxStringLength) + unsigned int maxStringLength, + Encoding encoding) { assert(target.type() == Json::objectValue); @@ -356,7 +370,7 @@ value["PrivateCreator"] = tagbis.getPrivateCreator(); } - std::auto_ptr<DicomValue> v(FromDcmtkBridge::ConvertLeafElement(element)); + std::auto_ptr<DicomValue> v(FromDcmtkBridge::ConvertLeafElement(element, encoding)); if (v->IsNull()) { value["Type"] = "Null"; @@ -393,7 +407,7 @@ { DcmItem* child = sequence.getItem(i); Json::Value& v = children.append(Json::objectValue); - StoreItem(v, *child, maxStringLength); + StoreItem(v, *child, maxStringLength, encoding); } target[formattedTag]["Name"] = tagName; @@ -407,7 +421,7 @@ DcmDataset& dataset, unsigned int maxStringLength) { - StoreItem(root, dataset, maxStringLength); + StoreItem(root, dataset, maxStringLength, DetectEncoding(dataset)); }