def __new__(cls, val, encodings): """Return unicode string after conversion of each part val -- the PN value to store encodings -- a list of python encodings, generally found from dicom.charset.python_encodings mapping of values in DICOM data element (0008,0005). """ from dicom.charset import clean_escseq # in here to avoid circular import # Make the possible three character encodings explicit: if not isinstance(encodings, list): encodings = [encodings] * 3 if len(encodings) == 2: encodings.append(encodings[1]) components = val.split(b"=") # Remove the first encoding if only one component is present if (len(components) == 1): del encodings[0] comps = [ clean_escseq(C.decode(enc), encodings) for C, enc in zip(components, encodings) ] new_val = "=".join(comps) return str.__new__(cls, new_val)
def decode(self, encodings=None): encodings = self._verify_encodings(encodings) from dicom.charset import clean_escseq if not isinstance(self.components[0], bytes): comps = self.components else: comps = [clean_escseq(comp.decode(enc), encodings) for comp, enc in zip(self.components, encodings)] while len(comps) and not comps[-1]: comps.pop() return PersonName3('='.join(comps), encodings)
def __new__(cls, val, encodings): """Return unicode string after conversion of each part val -- the PN value to store encodings -- a list of python encodings, generally found from dicom.charset.python_encodings mapping of values in DICOM data element (0008,0005). """ from dicom.charset import clean_escseq # in here to avoid circular import # Make the possible three character encodings explicit: if not isinstance(encodings, list): encodings = [encodings]*3 if len(encodings) == 2: encodings.append(encodings[1]) components = val.split("=") # Remove the first encoding if only one component is present if (len(components) == 1): del encodings[0] unicomponents = [clean_escseq( unicode(components[i],encodings[i]), encodings) for i, component in enumerate(components)] new_val = u"=".join(unicomponents) return unicode.__new__(cls, new_val)