Dado un código de carácter como número entero en una codificación, ¿cómo se puede obtener el código de carácter en, digamos, utf-8 y de nuevo como número entero?Python obtiene el código de caracteres en una codificación diferente?
Respuesta
UTF-8 is a variable-length encoding, así que supongo que realmente quiso decir "punto de código Unicode". Use chr()
para convertir el código de carácter en un carácter, decodifíquelo y use ord()
para obtener el punto de código.
>>> ord(chr(145).decode('koi8-r'))
9618
He aquí un ejemplo de cómo funciona el baile de codificación/decodificación:
>>> s = b'd\x06' # perhaps start with bytes encoded in utf-16
>>> map(ord, s) # show those bytes as integers
[100, 6]
>>> u = s.decode('utf-16') # turn the bytes into unicode
>>> print u # show what the character looks like
٤
>>> print ord(u) # show the unicode code point as an integer
1636
>>> t = u.encode('utf-8') # turn the unicode into bytes with a different encoding
>>> map(ord, t) # show that encoding as integers
[217, 164]
Esperanza esto ayuda :-)
Si necesita construir el Unicode directamente de un entero, utilice unichr:
>>> u = unichr(1636)
>>> print u
٤
Haces c un único mapa un "número entero" de una codificación a otra si son codificaciones de un solo byte.
Aquí hay un ejemplo usando "iso-8859-15" y "CP1252" (también conocido como "ANSI"):
>>> s = u'€'
>>> s.encode('iso-8859-15')
'\xa4'
>>> s.encode('cp1252')
'\x80'
>>> ord(s.encode('cp1252'))
128
>>> ord(s.encode('iso-8859-15'))
164
Tenga en cuenta que ord
aquí se utiliza para obtener el número ordinal del byte codificado . Usando ord
en la cadena Unicode originales daría su punto de código Unicode:
>>> ord(s)
8364
La operación inversa a ord
se puede hacer utilizando cualquiera chr
(para los códigos en el rango 0
a 127
) o unichr
(para los códigos de la gama 0
-sys.maxunicode
):
>>> print chr(65)
A
>>> print unichr(8364)
€
para codificaciones múltiples bytes, un simple "número entero" mapeo no suele ser posible.
Así es el mismo ejemplo que el anterior, pero utilizando "iso-8859-15" y "UTF-8":
>>> s = u'€'
>>> s.encode('iso-8859-15')
'\xa4'
>>> s.encode('utf-8')
'\xe2\x82\xac'
>>> [ord(c) for c in s.encode('iso-8859-15')]
[164]
>>> [ord(c) for c in s.encode('utf-8')]
[226, 130, 172]
La codificación "UTF-8" utiliza tres bytes para codificar el mismo carácter, por lo que no es posible un mapeo de uno a uno. Habiendo dicho eso, muchas codificaciones (incluyendo "utf-8") están diseñadas para ser compatibles con ASCII, por lo que una asignación es generalmente posible para códigos en el rango 0-127 (pero solo trivialmente, porque el código siempre será lo mismo).
Esto es, lo que llamo, una respuesta perfecta :) –
- 1. Caracteres de codificación de Python con urllib.quote
- 2. JSON codificación de caracteres
- 3. Codificación de caracteres JDBC
- 4. electrónico Codificación sujeto (SMTP) en Python con caracteres no ASCII
- 5. URLConnection no obtiene el juego de caracteres
- 6. Codificación URL en python
- 7. Codificación de caracteres de textarea
- 8. Codificación de caracteres UTF-8 en Java
- 9. Codificación de caracteres Javascript predeterminada?
- 10. jQuery AJAX Codificación de caracteres
- 11. GWT: codificación de caracteres diéresis
- 12. ANT no obtiene el código de salida devuelto por una secuencia de comandos python
- 13. Cadenas y codificación de caracteres en C++
- 14. ¿Cómo arreglo los caracteres HTML no válidos en páginas servidas con codificación diferente?
- 15. Codificación HTML para caracteres franceses
- 16. Problema de codificación de caracteres con PDO_ODBC
- 17. Codificación diferente de archivos latex y bibtex
- 18. En Python, ¿cómo creo una cadena de n caracteres en una línea de código?
- 19. Entidades de caracteres HTML y conjunto de codificación de caracteres
- 20. Algoritmo de detección de codificación de caracteres
- 21. Cuestión de codificación de caracteres Strophe
- 22. Detectando la codificación de caracteres de una solicitud HTTP POST
- 23. ¿Cómo cambio una codificación de caracteres de scripts de shell?
- 24. codificación de caracteres cambios después de window.open()
- 25. Problemas/caracteres de codificación DOMDocument transformados
- 26. Spring/Rest @PathVariable codificación de caracteres
- 27. Problema de codificación de caracteres con Tomcat
- 28. Problemas de codificación de caracteres de PHPMailer
- 29. Codificación de Python JSON
- 30. necesito ayuda en jquery unformjs seleccione menú '&' codificación de caracteres
'chr() arg no en el rango (256)' para 'shift_jisx0213' –
En Python 2, 'chr' solo admite ASCII, por lo que solo los números en el rango' [0..255] '. Use 'unichr' en su lugar para soporte Unicode. – poke
Hmm 'UnicodeEncodeError: el códec 'ascii' no puede codificar el carácter u '\ u8140' en la posición 0 : ordinal no en el rango (128)' –