# HG changeset patch # User Sebastien Jodogne # Date 1403724078 -7200 # Node ID 63973b76a51fd15222b4ab94ff90416d23bc0a3f # Parent 2fd5a163776d9a218e5db73f2e0a4b1e21a7c67d detection of encoding diff -r 2fd5a163776d -r 63973b76a51f Core/Toolbox.cpp --- a/Core/Toolbox.cpp Wed Jun 25 16:08:47 2014 +0200 +++ b/Core/Toolbox.cpp Wed Jun 25 21:21:18 2014 +0200 @@ -513,7 +513,7 @@ break; default: - throw OrthancException(ErrorCode_ParameterOutOfRange); + throw OrthancException(ErrorCode_NotImplemented); } try diff -r 2fd5a163776d -r 63973b76a51f DarwinCompilation.txt --- a/DarwinCompilation.txt Wed Jun 25 16:08:47 2014 +0200 +++ b/DarwinCompilation.txt Wed Jun 25 21:21:18 2014 +0200 @@ -28,7 +28,7 @@ ---------------------------- # cd ~/OrthancBuild -# cmake -GXcode -DCMAKE_OSX_DEPLOYMENT_TARGET=10.8 -DSTATIC_BUILD=ON -DSTANDALONE_BUILD=ON .. +# cmake -GXcode -DCMAKE_OSX_DEPLOYMENT_TARGET=10.8 -DSTATIC_BUILD=ON -DSTANDALONE_BUILD=ON ~/Orthanc NB: Adapt the value of "CMAKE_OSX_DEPLOYMENT_TARGET" with respect to your version of XCode. diff -r 2fd5a163776d -r 63973b76a51f OrthancServer/FromDcmtkBridge.cpp --- a/OrthancServer/FromDcmtkBridge.cpp Wed Jun 25 16:08:47 2014 +0200 +++ b/OrthancServer/FromDcmtkBridge.cpp Wed Jun 25 21:21:18 2014 +0200 @@ -61,6 +61,7 @@ #include #include #include +#include #include #include @@ -118,8 +119,34 @@ Encoding FromDcmtkBridge::DetectEncoding(DcmDataset& dataset) { - // TODO Implement this! - return Encoding_Latin1; + // By default, assume UTF-8 encoding (as in dcm2xml.cc) + Encoding encoding = Encoding_Utf8; + + OFString tmp; + if (dataset.findAndGetOFString(DCM_SpecificCharacterSet, tmp).good()) + { + std::string characterSet = Toolbox::StripSpaces(std::string(tmp.c_str())); + + // TODO Add more encodings + + if (characterSet == "ISO_IR 6" || + characterSet == "ISO_IR 192") + { + encoding = Encoding_Utf8; + } + else if (characterSet == "ISO_IR 100") + { + encoding = Encoding_Latin1; + } + else if (!characterSet.empty()) + { + LOG(WARNING) << "Value of Specific Character Set (0008,0005) is not supported: " << characterSet; + // Fallback to ASCII (remove all special characters) + encoding = Encoding_Ascii; + } + } + + return encoding; }