Skip to content

Commit

Permalink
Merge pull request #968 from lassoan/dicom-remove-invalid-non-decoded…
Browse files Browse the repository at this point in the history
…-chars

BUG: Remove invalid characters from DICOM strings with unsupported character encoding
  • Loading branch information
pieper authored May 9, 2021
2 parents adacea2 + ecb9f09 commit dc2e128
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions Libs/DICOM/Core/ctkDICOMItem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -378,11 +378,11 @@ QString ctkDICOMItem::Decode( const DcmTag& tag, const OFString& raw ) const
qtEncodingNamesForDICOMEncodingNames.insert("ISO_IR 148", "ISO-8859-9");
qtEncodingNamesForDICOMEncodingNames.insert("ISO_IR 179", "ISO-8859-13");
qtEncodingNamesForDICOMEncodingNames.insert("ISO_IR 192", "UTF-8");
// japanese
// Japanese
qtEncodingNamesForDICOMEncodingNames.insert("ISO 2022 IR 13", "ISO 2022-JP"); // Single byte charset, JIS X 0201: Katakana, Romaji
qtEncodingNamesForDICOMEncodingNames.insert("ISO 2022 IR 87", "ISO 2022-JP"); // Multi byte charset, JIS X 0208: Kanji, Kanji set
qtEncodingNamesForDICOMEncodingNames.insert("ISO 2022 IR 159", "ISO 2022-JP");
// korean
// Korean
qtEncodingNamesForDICOMEncodingNames.insert("ISO 2022 IR 149", "EUC-KR"); // Multi byte charset, KS X 1001: Hangul, Hanja

// use all names that Qt knows by itself
Expand Down Expand Up @@ -424,7 +424,22 @@ QString ctkDICOMItem::Decode( const DcmTag& tag, const OFString& raw ) const
}
else
{
std::cerr << "DICOM dataset contains some encoding that we never thought we would see(" << d->m_SpecificCharacterSet.toStdString() << "). Using default encoding." << std::endl;
std::cerr << "DICOM dataset contains some encoding that we never thought we would see (" << d->m_SpecificCharacterSet.toStdString() << "). Using ASCII encoding." << std::endl;
// Replace non-ASCII characters by "?" to avoid decoding errors and random special characters appearing in strings.
QString asciiString;
for (int i = 0; i < raw.length(); i++)
{
int ch = raw[i];
if (32 <= raw[i] && raw[i] < 128)
{
asciiString += raw[i];
}
else
{
asciiString += "?";
}
}
return asciiString;
}
}

Expand Down

0 comments on commit dc2e128

Please sign in to comment.