Si se encuentra con '\\ \\ xe4 XB8 \\ \\ xad xe5 \\ \\ X9b XBD' tal cadena UTF-8 en texto plano, y no en el código, pero para llegar desde algún otro lugar, y no puede ser cambiado, necesitamos un modo de decodificación especial
En python2, puede decodificar directamente ( "string_escape") resolvió, pero python3 en el tipo str no puede decodificar, a continuación, cómo hacerlo?
Hay dos maneras, primero de stackoverflow
s = r ' \ xe4 \ XB8 \ xad \ xe5 \ X9b \ XBD ' c = s.encode (). decodificación ( ' unicode-Escape ' ) .encode ( ' raw_unicode_escape ' ) .decode ( ' utf-8 ' )
de impresión (c)
Sí, entonces decodificación ( 'unicode-escape'), en realidad se convierte en la cadena '\ xe4 \ XB8 \ xad \ xe5 \ X9b \ XBD', entonces se puede utilizar una .encode convencional ( 'raw_unicode_escape'). Decode ( 'utf-8') solución
El segundo método conocido casi desde
Lo python3 hoyo de codificación? - ja respuesta - saber casi https://www.zhihu.com/question/60231684/answer/1076033667
s = r ' \ xe4 \ XBD \ xa0 \ xe5 \ xa5 \ XBD ' eval ( " print ( ' " + s + " ' .encode ( 'raw_unicode_escape'). decodificación ( 'utf-8')) " ) # 写成函数 def getUtf8Escape (s): d = [] eval ( " d.append ( ' " + s + " ' .encode ( 'raw_unicode_escape') de decodificación ( 'utf-8')). " ) de retorno d [0] de impresión ( getUtf8Escape (s))
Método simple y crudo, pero funciona
Por cierto, si es expresamente Unicode o no \\ escapado UTF-8, es realmente muy simple
#Unicode明文
a = r '\ u8bf7'
b = a.encode (). Decodificación ( "unicode_escape")
de impresión (b)
# UTF-8
A = '\ xe4 \ XBD \ xa0 \ xe5 \ xa5 \ XBD'
b = a.encode ( 'raw_unicode_escape'). decodificación ( 'utf-8')
de impresión (b)