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 pydicom.charset.python_encodings mapping of values in DICOM data element (0008,0005). """ # in here to avoid circular import from pydicom.charset import clean_escseq # 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 = u"=".join(comps) return compat.text_type.__new__(cls, new_val)
def decode(self, encodings=None): encodings = self._verify_encodings(encodings) from pydicom.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)