diff OrthancServer/FromDcmtkBridge.cpp @ 1090:e494ceb8d763

support more encodings
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 05 Aug 2014 12:04:23 +0200
parents e07b90fb00eb
children 552a038f7c96
line wrap: on
line diff
--- a/OrthancServer/FromDcmtkBridge.cpp	Tue Aug 05 08:49:25 2014 +0200
+++ b/OrthancServer/FromDcmtkBridge.cpp	Tue Aug 05 12:04:23 2014 +0200
@@ -128,56 +128,26 @@
     if (dataset.findAndGetOFString(DCM_SpecificCharacterSet, tmp).good())
     {
       std::string characterSet = Toolbox::StripSpaces(std::string(tmp.c_str()));
-      Toolbox::ToUpperCase(characterSet);
 
-      if (characterSet == "ISO_IR 6" ||
-          characterSet == "ISO_IR 192")
-      {
-        encoding = Encoding_Utf8;
-      }
-      else if (characterSet == "ISO_IR 100")
+      if (characterSet.empty())
       {
-        encoding = Encoding_Latin1;
-      }
-      else if (characterSet == "ISO_IR 101")
-      {
-        encoding = Encoding_Latin2;
-      }
-      else if (characterSet == "ISO_IR 109")
-      {
-        encoding = Encoding_Latin3;
-      }
-      else if (characterSet == "ISO_IR 110")
-      {
-        encoding = Encoding_Latin4;
+        // Empty specific character set tag: Use the default encoding
       }
-      else if (characterSet == "ISO_IR 148")
-      {
-        encoding = Encoding_Latin5;
-      }
-      else if (characterSet == "ISO_IR 144")
+      else if (GetDicomEncoding(encoding, characterSet.c_str()))
       {
-        encoding = Encoding_Cyrillic;
-      }
-      else if (characterSet == "ISO_IR 127")
-      {
-        encoding = Encoding_Arabic;
+        // The specific character set is supported by the Orthanc core
       }
-      else if (characterSet == "ISO_IR 126")
-      {
-        encoding = Encoding_Greek;
-      }
-      else if (characterSet == "ISO_IR 138")
+      else
       {
-        encoding = Encoding_Hebrew;
-      }
-      else if (!characterSet.empty())
-      {
-        LOG(WARNING) << "Value of Specific Character Set (0008,0005) is not supported: " << characterSet;
-        // Fallback to ASCII (remove all special characters)
+        LOG(WARNING) << "Value of Specific Character Set (0008,0005) is not supported: " << characterSet
+                     << ", fallback to ASCII (remove all special characters)";
         encoding = Encoding_Ascii;
       }
     }
+    else
+    {
+      // No specific character set tag: Use the default encoding
+    }
 
     return encoding;
   }