組み込みのコーデックを使用しますunicode_escape。
tがすでにbytes(8ビット文字列)の場合は、次のように簡単です。
>>> print(t.decode('unicode_escape'))
Róisín
tすでにUnicodeにデコードされている場合は、この方法でエンコードしてからbytesに戻すことができますdecode。すべてのUnicode文字がエスケープされていることが確実な場合は、実際には、エンコードに使用するコーデックは関係ありません。それ以外の場合は、元のバイト文字列を取り戻そうとすることもできますが、エンコードされていない文字を強制的にエンコードすると、すでにエンコードされている文字と一緒にデコードされる方が簡単で、おそらく安全です。
>>> print(t.encode('unicode_escape').decode('unicode_escape')
Róisín
将来、正規表現を使用してこの種のことを行う方法を知りたい場合subは、のパターンの代わりに関数を渡すことができることに注意してくださいrepl。また、を呼び出すことint(hexstring, 16)で任意の16進文字列を整数に変換し、を使用して任意の整数を対応するUnicode文字に変換できますchr(これはPython 2とは異なる1ビットであることに注意してくださいunichr。代わりに必要です)。それで:
>>> re.sub(r'(\\u[0-9A-Fa-f]+)', lambda matchobj: chr(int(matchobj.group(0)[2:], 16)), t)
Róisín
または、もう少し明確にします。
>>> def unescapematch(matchobj):
... escapesequence = matchobj.group(0)
... digits = escapesequence[2:]
... ordinal = int(digits, 16)
... char = chr(ordinal)
... return char
>>> re.sub(r'(\\u[0-9A-Fa-f]+)', unescapematch, t)
Róisín
コーデックは、unicode_escape実際には、、、 8進数()、および特殊文字()シーケンスだけでなく、を処理し、適切な最大桁数(4は4、8はなど)のみを読み取るための適切なルールを実装します。 )ではなく、そしておそらく私が考えていなかったより多くのこと。しかし、これはあなたにアイデアを与えるはずです。\U\x\X\066\n\u\u\Ur'\\u22222''∢2'''