Mercurial > hg > orthanc
comparison OrthancServer/FromDcmtkBridge.cpp @ 2207:6dc3bdb4088b
Fix handling of encodings in C-FIND for worklists
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 09 Dec 2016 11:24:04 +0100 |
parents | 84d1d392a9ab |
children | e3fd5bc429a2 |
comparison
equal
deleted
inserted
replaced
2206:27106f7e3759 | 2207:6dc3bdb4088b |
---|---|
1895 } | 1895 } |
1896 | 1896 |
1897 target.SetValue(ParseTag(members[i]), value.asString(), false); | 1897 target.SetValue(ParseTag(members[i]), value.asString(), false); |
1898 } | 1898 } |
1899 } | 1899 } |
1900 | |
1901 | |
1902 void FromDcmtkBridge::ChangeStringEncoding(DcmItem& dataset, | |
1903 Encoding source, | |
1904 Encoding target) | |
1905 { | |
1906 // Recursive exploration of a dataset to change the encoding of | |
1907 // each string-like element | |
1908 | |
1909 if (source == target) | |
1910 { | |
1911 return; | |
1912 } | |
1913 | |
1914 for (unsigned long i = 0; i < dataset.card(); i++) | |
1915 { | |
1916 DcmElement* element = dataset.getElement(i); | |
1917 if (element) | |
1918 { | |
1919 if (element->isLeaf()) | |
1920 { | |
1921 char *c = NULL; | |
1922 if (element->isaString() && | |
1923 element->getString(c).good() && | |
1924 c != NULL) | |
1925 { | |
1926 std::string a = Toolbox::ConvertToUtf8(c, source); | |
1927 std::string b = Toolbox::ConvertFromUtf8(a, target); | |
1928 element->putString(b.c_str()); | |
1929 } | |
1930 } | |
1931 else | |
1932 { | |
1933 // "All subclasses of DcmElement except for DcmSequenceOfItems | |
1934 // are leaf nodes, while DcmSequenceOfItems, DcmItem, DcmDataset | |
1935 // etc. are not." The following dynamic_cast is thus OK. | |
1936 DcmSequenceOfItems& sequence = dynamic_cast<DcmSequenceOfItems&>(*element); | |
1937 | |
1938 for (unsigned long j = 0; j < sequence.card(); j++) | |
1939 { | |
1940 ChangeStringEncoding(*sequence.getItem(j), source, target); | |
1941 } | |
1942 } | |
1943 } | |
1944 } | |
1945 } | |
1900 } | 1946 } |