# HG changeset patch # User Sebastien Jodogne # Date 1407167865 -7200 # Node ID e56c3ed8d73833a6324af74164c0fe08d22d5879 # Parent b161593551db9a45289f8526080d6eb36ea4e5fa Parameter to set the default encoding for DICOM files without SpecificCharacterSet diff -r b161593551db -r e56c3ed8d738 Core/Enumerations.cpp --- a/Core/Enumerations.cpp Mon Aug 04 12:16:50 2014 +0200 +++ b/Core/Enumerations.cpp Mon Aug 04 17:57:45 2014 +0200 @@ -261,6 +261,47 @@ } + const char* EnumerationToString(Encoding encoding) + { + switch (encoding) + { + case Encoding_Utf8: + return "Utf8"; + + case Encoding_Latin1: + return "Latin1"; + + case Encoding_Ascii: + return "Ascii"; + + default: + throw OrthancException(ErrorCode_ParameterOutOfRange); + } + } + + + Encoding StringToEncoding(const char* encoding) + { + std::string s(encoding); + Toolbox::ToUpperCase(s); + + if (s == "UTF8") + { + return Encoding_Utf8; + } + else if (s == "LATIN1") + { + return Encoding_Latin1; + } + else if (s == "ASCII") + { + return Encoding_Ascii; + } + + throw OrthancException(ErrorCode_ParameterOutOfRange); + } + + ResourceType StringToResourceType(const char* type) { std::string s(type); diff -r b161593551db -r e56c3ed8d738 Core/Enumerations.h --- a/Core/Enumerations.h Mon Aug 04 12:16:50 2014 +0200 +++ b/Core/Enumerations.h Mon Aug 04 17:57:45 2014 +0200 @@ -277,6 +277,10 @@ const char* EnumerationToString(ImageFormat format); + const char* EnumerationToString(Encoding encoding); + + Encoding StringToEncoding(const char* encoding); + ResourceType StringToResourceType(const char* type); ImageFormat StringToImageFormat(const char* format); diff -r b161593551db -r e56c3ed8d738 NEWS --- a/NEWS Mon Aug 04 12:16:50 2014 +0200 +++ b/NEWS Mon Aug 04 17:57:45 2014 +0200 @@ -1,7 +1,7 @@ Pending changes in the mainline =============================== - +* Parameter to set the default encoding for DICOM files without SpecificCharacterSet Version 0.8.1 (2014/07/29) diff -r b161593551db -r e56c3ed8d738 OrthancServer/FromDcmtkBridge.cpp --- a/OrthancServer/FromDcmtkBridge.cpp Mon Aug 04 12:16:50 2014 +0200 +++ b/OrthancServer/FromDcmtkBridge.cpp Mon Aug 04 17:57:45 2014 +0200 @@ -41,6 +41,7 @@ #include "FromDcmtkBridge.h" #include "ToDcmtkBridge.h" +#include "OrthancInitialization.h" #include "../Core/Toolbox.h" #include "../Core/OrthancException.h" #include "../Core/ImageFormats/PngWriter.h" @@ -119,8 +120,9 @@ Encoding FromDcmtkBridge::DetectEncoding(DcmDataset& dataset) { - // By default, assume UTF-8 encoding (as in dcm2xml.cc) - Encoding encoding = Encoding_Utf8; + // By default, Ascii encoding is assumed (this removes all the special charaters) + std::string s = Configuration::GetGlobalStringParameter("DefaultEncoding", ""); + Encoding encoding = s.empty() ? Encoding_Ascii : StringToEncoding(s.c_str()); OFString tmp; if (dataset.findAndGetOFString(DCM_SpecificCharacterSet, tmp).good()) diff -r b161593551db -r e56c3ed8d738 Resources/Configuration.json --- a/Resources/Configuration.json Mon Aug 04 12:16:50 2014 +0200 +++ b/Resources/Configuration.json Mon Aug 04 17:57:45 2014 +0200 @@ -180,5 +180,10 @@ // The maximum number of active jobs in the Orthanc scheduler. When // this limit is reached, the addition of new jobs is blocked until // some job finishes. - "LimitJobs" : 10 + "LimitJobs" : 10, + + // The default encoding that is assumed for DICOM files without + // "SpecificCharacterSet" DICOM tag. The allowed values are + // currently "Latin1", "Utf8" and "Ascii". + "DefaultEncoding" : "Latin1" } diff -r b161593551db -r e56c3ed8d738 UnitTestsSources/UnitTestsMain.cpp --- a/UnitTestsSources/UnitTestsMain.cpp Mon Aug 04 12:16:50 2014 +0200 +++ b/UnitTestsSources/UnitTestsMain.cpp Mon Aug 04 17:57:45 2014 +0200 @@ -639,6 +639,20 @@ ASSERT_EQ("", t[3]); } +TEST(Toolbox, Enumerations) +{ + ASSERT_EQ(Encoding_Utf8, StringToEncoding(EnumerationToString(Encoding_Utf8))); + ASSERT_EQ(Encoding_Ascii, StringToEncoding(EnumerationToString(Encoding_Ascii))); + ASSERT_EQ(Encoding_Latin1, StringToEncoding(EnumerationToString(Encoding_Latin1))); + + ASSERT_EQ(ResourceType_Patient, StringToResourceType(EnumerationToString(ResourceType_Patient))); + ASSERT_EQ(ResourceType_Study, StringToResourceType(EnumerationToString(ResourceType_Study))); + ASSERT_EQ(ResourceType_Series, StringToResourceType(EnumerationToString(ResourceType_Series))); + ASSERT_EQ(ResourceType_Instance, StringToResourceType(EnumerationToString(ResourceType_Instance))); + + ASSERT_EQ(ImageFormat_Png, StringToImageFormat(EnumerationToString(ImageFormat_Png))); +} + #if defined(__linux)