Tengo una aplicación que lee los datos en formato UTF-8 del servidor, pero debe mostrarse en ISO 8859-1 (Latin-1). ¿Hay alguna API de Cocoa para lograr esto?Convertir la codificación UTF-8 a la codificación ISO 8859-1 con NSString
Respuesta
Puede utilizar NSString
's getCString:maxLength:encoding:
método, como esto:
char converted[([string length] + 1)];
[string getCString:converted maxLength:([string length] + 1) encoding: NSISOLatin1StringEncoding];
NSLog(@"%s", converted);
Una vez que tenga esto, se puede volver a inicializar una instancia NSString
de esa misma codificación utilizando el método stringWithCString:encoding:
clase:
NSString *converted_str = [NSString stringWithCString:converted encoding:NSISOLatin1StringEncoding];
uso
+ (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc
Ejemplo:
latinStringForDisplay = [NSString stringWithCString:yourCstringHere encoding:NSISOLatin1StringEncoding];
Eso debería hacerlo.
Esta función hace NSString desde el buffer de latin1 :) El autor pregunta acerca de la operación inversa. –
@Evgen: esa función pide una cadena C 'yourCstringHere', y emite un NSSring con codificación latina, no desde un buffer latino como lo que has citado:" ... make NSString from Latin1 buffer :) "Thanks: -) –
No es así. Su código indica que la cadena C está codificada en ISO-8859-1 y desea un NSString. Así que si tuviera la cadena "åhus" codificada como UTF-8, pero de latin-1 tendría un flujo de bytes como: C3 A5 68 75 73 y su método generaría el NSString: "Ã ¥ hus", lo cual es claramente incorrecto . –
Prefiero usar dataUsingEncoding:allowLossyConversion:
porque no requiere que adivine la cantidad de almacenamiento que se va a asignar, y el NSData devuelto le dice cuántos bytes se requieren.
La respuesta de Jacobs realmente no funcionó para mi. Lo que eventualmente funcionó para mí fue usar
[username stringByAddingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding]
- 1. Convierte caracteres utf8 a iso-88591 y vuelve a PHP
- 2. ios Codificación UTF8 de nsstring
- 3. NSData a la codificación NSString
- 4. codificación Java UTF8
- 5. knitr y codificación UTF8
- 6. Jquery ignora la codificación ISO-8859-1
- 7. Convertir ASCII de la codificación UTF-8
- 8. Const const char * string a NSString con longitud Y codificación
- 9. Convertir la codificación del archivo del repositorio git
- 10. Decodificación UTF8 con NSString
- 11. java: cómo convertir un archivo a utf8
- 12. Django makemessages errors Desconocido codificación "utf8"
- 13. ¿Cómo GetBytes() en C# con codificación UTF8 con BOM?
- 14. La codificación UTF8 no funciona cuando se usa ajax
- 15. Escribiendo archivos XML usando XmlTextWriter con codificación ISO-8859-1
- 16. ¿Cómo puedo convertir la codificación de utf-8 a codificación GSM 03.38 en PHP para SMS?
- 17. Postgres COPY archivo con codificación LATIN1 en la tabla con codificación UTF
- 18. Cómo convertir la codificación de la base de datos de MS Access a UTF-8?
- 19. Gestión de memoria: de NSString stringWithCString: codificación:
- 20. cómo convertir la codificación de caracteres con ruby 1.9
- 21. Cómo convertir una cadena a UTF8?
- 22. VB6/VBScript cambia la codificación del archivo a ansi
- 23. ¿Cómo convertir una imagen a codificación base64?
- 24. PHP codificación con DOMDocument
- 25. cambiar la codificación del archivo
- 26. archivo de cambio OSX codificación (iconv) recursivo
- 27. Rieles: problemas de codificación con valores hash serializados a pesar de UTF8
- 28. WCF Excepción: Codificación de mensajes de texto y codificación ISO-8859-1
- 29. Conversión de codificación Eclipse
- 30. Codificación URL y codificación HTML NSStrings
"mostrar en ISO 8859-1" no tiene sentido. Si muestra texto, los personajes se dibujan. Y los caracteres son independientes de una codificación. La codificación se usa cuando el texto se almacena o transmite, pero no se visualiza. – Codo
@ user543101 ¿Qué parte de mi respuesta no respondió lo suficiente a tu pregunta? –
Estoy de acuerdo con Codo, esto no tiene sentido. Tomar caracteres codificados con ISO-8859-1 y simplemente serializarlos como UTF-8 solo está bien porque se incorporó ISO-8895-1 como los primeros 256 puntos de código, pero esto fallaría con cualquier otra codificación y podría fallar si no se está realmente usando ISO-8859-1 (por ejemplo, usando 8859-15 o Windows-1252). El servidor debería enviar los puntos de código Unicode codificados en UTF-8 y simplemente debería mostrar los glifos asociados. –