I would like to show the NSString below on my UILabel:
NSString *strValue=@"你好";
but i can not show it on my UILabel i get strange characters!
I use this code to show the text:
[NSString stringWithCString:[strValue UTF8String] encoding:NSUTF8StringEncoding];
I tried [NSString stringWithCString:[strValue cStringUsingEncoding:NSISOLatin1StringEncoding] encoding:NSUTF8StringEncoding] and it worked
but i can not show emoticons with cStringUsingEncoding:NSISOLatin1StringEncoding so i have to use UTF8String.
Any help appreciated.
Your source file is in UTF-8, but the compiler you are using thinks it’s ISO-Latin 1. What you think is the string
@"你好"is actually the string@"ä½ å¥½". But when you askNSString*to give you this back as ISO-Latin 1, and treat it as UTF-8, you’ve reversed the process the compiler took and you end up with the original string.One solution that you can use here is to tell your compiler what encoding your source file is in. There is a compiler flag (for GCC it’s
-finput-charset=UTF-8, not sure about clang) that will tell the compiler what encoding to use. Curiously, UTF-8 should be the default already, but perhaps you’re overriding this with a locale.A more portable solution is to use only ASCII in your source file. You can accomplish this by replacing the non-ASCII chars with a string escape using
\u1234or\U12345678. In your case, you’d useOf course, once you get your string constant to be correct, you can ditch the whole encoding stuff and just use
strValuedirectly.