python3 de texto claro de decodificación UTF-8

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

https://stackoverflow.com/questions/26311277/evaluate-utf-8-literal-escape-sequences-in-a-string-in-python3


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)

Supongo que te gusta

Origin www.cnblogs.com/LiuZhongbin888/p/12486978.html
Recomendado
Clasificación