NSLog genera caracteres Unicode como basura cuando se depura en el iPhone
objective-c ios (5)
Intenta convertirlo en una cadena UTF8.
NSString *str = [aString UTF8String]
NSLog(@"%@", str);
Espero que esto ayude.
EDITAR: la salida NSLog funciona bien en el simulador, pero no funciona cuando se conecta a un dispositivo real. Y parece que es un error - http://openradar.appspot.com/11148883 . También sucede que está relacionado con el LLDB, cambiando Xcode a GDB resuelve el problema. O bien es posible el código de aplicación de JetBrain, que funciona bien con el LLDB.
Tengo un montón de cadenas Unicode en la aplicación, y si intento dar salida a cualquiera de esas cadenas usando algo como NSLog (@ "% @", aString) entonces todos los caracteres ASCII en la cadena se imprimirán bien pero todo el cirílico Las cartas se desordenarán, así que en lugar de
newLocation: coordinate:60.019584,30.284954 ''Удельная''
Me estoy poniendo:
newLocation: coordinate:60.019584,30.284954 ''–ü–æ–∫–ª–æ–Ω–Ω–æ–≥–æ—Ä—Å–∫–∞—è''
Y eso es bastante difícil de hacer cualquier depuración con ese tipo de salida. Y como esa aplicación está dirigida solo al mercado ruso, no puedo simplemente cambiar la configuración regional y usar cadenas en inglés.
Así que me pregunto si hay alguna manera de hacer que NSLog funcione bien con caracteres Unicode. Y solo busco algún tipo de solución de una sola línea , sé que hay algunas formas de escribir media página de código y generar caracteres de Unicode, pero estoy buscando algo más corto. Idealmente, estoy buscando algún método de NSString que haga que todo funcione. p.ej
NSLog(@"%@", [aString someThingThatMakesUnicodeWorkWithXcodeConsole]);
Intente ponerlo como NSLog(@"%@", aString);
EDITAR:
Puedes convertirlo en cadena UTF8. Esto podría hacerte pasar.
NSString *str = [aString UTF8String];
Espero que esto ayude.
Por lo que sé, es relevante para NSLog () y LLDB en algunas versiones de Xcode. Prueba con una de estas soluciones:
- Compruebe iniciar sesión en Xcode Organizer >> Dispositivos >> su dispositivo >> Consola.
- Use GDB como su depurador en lugar de LLDB si está utilizando el último. Esto se puede cambiar desde las opciones de esquema. Por favor, consulte los pasos en el comentario de "cocos2d man" a continuación.
- Actualizar a Xcode 4.3.2. Algunas personas dicen que resolvió este problema, pero yo mismo no lo he confirmado.
Prueba esto. Esto funciona para mi.
NSLog(@"%@", [NSString stringWithCString:[[places description] cStringUsingEncoding:NSASCIIStringEncoding] encoding:NSNonLossyASCIIStringEncoding]);
Sí, obviamente puede crear una cadena que contendrá y emitirá letras cirílicas. Cuando estaba aprendiendo Objective-C, tuve el mismo problema al principio (también estaba trabajando con palabras rusas y cosas así). Así que la solución es convertir la cadena a otro formato como este:
NSString *string = [NSString stringWithCString:"Привет, как дела?" encoding:4];
NSLog(@"%@", string);
o
NSString *string = [NSString stringWithUTF8String:"Этот вариант короче!"];
NSLog(@"%@", string);
Espero que te ayude!
PS Significa que debe crear sus cadenas como cadenas de estilo C y establecer su parámetro de codificación en 4 (UTF-8). Puede ver toda la lista de parámetros disponibles en la documentación de NSStringEncoding en NSString.