2012-04-19 10 views
16

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, el cambio de Xcode a GDB resuelve el problema. O es posible el AppCode de JetBrain, que funciona bien con LLDB.NSLog genera caracteres Unicode como basura al depurar en el iPhone


que tienen un montón de cadenas Unicode en la aplicación, y si trato de salida de cualquiera de esas cadenas usando algo como NSLog (@ "% @", AString) entonces todos los caracteres ASCII en el cadena será impreso bien, pero todas las letras cirílicas será en mal estado, por lo que en lugar de

newLocation: coordinate:60.019584,30.284954 'Удельная' 

estoy recibiendo:

newLocation: coordinate:60.019584,30.284954 '–ü–æ–∫–ª–æ–Ω–Ω–æ–≥–æ—Ä—Å–∫–∞—è' 

Y que es bastante Es difícil hacer una depuración con ese tipo de resultados. Y como esa aplicación está destinada al mercado ruso, no puedo cambiar la configuración regional y usar cadenas en inglés.

Entonces, me pregunto si hay alguna manera de hacer que NSLog funcione bien con los caracteres Unicode? Y solo busco algún tipo de solución de one-liner, sé que hay algunas formas de escribir media página de código y caracteres unicode de salida, pero estoy buscando algo más corto. Idealmente, estoy buscando algún método de NSString que lo haga funcionar. p.ej.

NSLog(@"%@", [aString someThingThatMakesUnicodeWorkWithXcodeConsole]); 
+1

¿Estás seguro de que tu aString está almacenando correctamente la respuesta? De lo que publicaste, creo que aString no almacenó la respuesta correctamente, así que sí cuando lo imprimas con NSLog fallará. Imprimo caracteres griegos con NSLog todo el tiempo. ¿Cómo está almacenando la respuesta al aString? – Lefteris

+1

¿De dónde vienen las cadenas? ¿Los lees de un archivo? Cuando están dentro del código, debería funcionar. Probé: NSString * s = @ "Удельная"; NSLog (@ "% @", s); y funcionó bien. –

+0

Esos datos provienen de un archivo, pero un literal de cadena tampoco me ha funcionado. Pero parece que encontré la fuente: funciona bien en el simulador, pero saca basura cuando está conectado al iPhone, por lo que probablemente algo esté mal con algunas configuraciones. Gracias. –

Respuesta

3

Por lo que sé, es relevante para NSLog() y LLDB en algunas versiones de Xcode.Pruebe con una de estas soluciones:

  • Registrarse inicie Xcode Organizer >> Devices >> your device >> Console.
  • Use GDB como su depurador en lugar de LLDB si está utilizando este último. Esto se puede cambiar desde las opciones de esquema. Consulte los pasos del comentario de "hombre de cocos2d" a continuación.
  • Actualiza a Xcode 4.3.2. Algunas personas dicen que resolvió este problema, pero yo mismo no lo he confirmado.
+0

Gracias, cambiar a GDB en realidad lo solucionó. Si bien cambiar a 4.3.2 no ayudará porque ya lo estoy usando. –

+0

De todos modos es la solución correcta, pero no puedo encontrar esta opción en el organizador y después de una larga búsqueda en el nuevo Xcode encontré que podemos cambiar el depurador del esquema usando los siguientes pasos: 1-clic en el esquema actual (residir al lado del botón de detener y reproducir, y al lado del modo de prueba actual como iphone-simulator ...) 2-elegir la opción "Editar esquema" 3-Abrir el grifo "información" 4-Ir a la tercera gota -down list que se llama "depurador" 5-cambiar el valor de LLDB a GDB cerrar la ventana y compilar y ejecutar de nuevo :) – Adel

+0

@ cocos2dman Disculpa las malentendidas ... Las 1, 2, 3 anteriores son tres soluciones, pero no 3 pasos para una solución Estoy cambiando los números con viñetas. – Hailei

0

trate de poner ella como NSLog(@"%@", aString);

EDIT:

se puede convertir en cadena UTF8. Esto podría ayudarte a pasar.

NSString *str = [aString UTF8String]; 

Espero que esto ayude.

+0

Seguro que lo hice, simplemente lo escribí mal en la pregunta, gracias de todos modos. –

+0

@dsokurenko Vea la parte de edición. – Akshay

+0

Lo he visto, pero desafortunadamente no funciona, todavía muestra la basura sin sentido. –

0

Intenta convertirlo en una cadena UTF8.

NSString *str = [aString UTF8String] 
NSLog(@"%@", str); 

Espero que esto ayude.

+0

No, no arregla la salida. –

+0

Asegúrese de que necesita colocar @ en nslog – Ranga

+4

En realidad @ "% @" no funcionará en absoluto porque la salida de UTFString es una cadena de caracteres, y con el formato% "% s" correcto arrojará la misma basura que la cadena original. –

4

Sí, obviamente puede crear una cadena que contendrá y generará letras cirílicas. Cuando estaba aprendiendo Objective-C, tuve el mismo problema al principio (también estaba trabajando con palabras rusas y cosas por el estilo). Así solución es convertir la cadena en otro formato como esto:

NSString *string = [NSString stringWithCString:"Привет, как дела?" encoding:4]; 
NSLog(@"%@", string); 

o

NSString *string = [NSString stringWithUTF8String:"Этот вариант короче!"]; 
NSLog(@"%@", string); 

Espero que te ayude!

P.S Significa que debe hacer 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.

+0

Gracias por la respuesta, pero sucede que en el simulador las cadenas rusas funcionan bien de manera predeterminada, y todas las soluciones propuestas, incluida la suya también funcionan. Pero cuando conecto Xcode al dispositivo real, las letras cirílicas se envían como basura. –

+0

@dsokurenko Lamentablemente no puedo verificar esto. ¿Qué hay acerca de la localización en su dispositivo? Realmente no sé cuál es el problema, pero intentaré resolverlo. –

+0

@dsokurenko Todo debe mostrarse correctamente, porque la cadena en la codificación correcta (UTF-8 es solo una que funciona correctamente con cirílico). –

0

Pruebe esto. Esto funciona para mi.

NSLog(@"%@", [NSString stringWithCString:[[places description] cStringUsingEncoding:NSASCIIStringEncoding] encoding:NSNonLossyASCIIStringEncoding]); 
Cuestiones relacionadas