1

我想在我的 UILabel 上显示下面的 NSString:

NSString *strValue=@"你好";

但我不能在我的 UILabel 上显示它我得到奇怪的字符!

我使用此代码显示文本:

[NSString stringWithCString:[strValue UTF8String] encoding:NSUTF8StringEncoding];

我试过[NSString stringWithCString:[strValue cStringUsingEncoding:NSISOLatin1StringEncoding] encoding:NSUTF8StringEncoding]了,它奏效了

但我无法显示表情符号cStringUsingEncoding:NSISOLatin1StringEncoding所以我必须使用UTF8String

任何帮助表示赞赏。

4

1 回答 1

2

您的源文件是 UTF-8 格式,但您使用的编译器认为它是 ISO-Latin 1。您认为 string@"你好"实际上是 string @"你好"。但是,当您要求NSString*将其返回为 ISO-Latin 1 并将其视为 UTF-8 时,您已经反转了编译器所采用的过程,最终得到了原始字符串。

您可以在此处使用的一种解决方案是告诉您的编译器您的源文件的编码是什么。有一个编译器标志(对于 GCC,它是-finput-charset=UTF-8,不确定 clang)将告诉编译器使用什么编码。奇怪的是,UTF-8 应该已经是默认设置了,但也许您正在使用语言环境覆盖它。

更便携的解决方案是在源文件中仅使用 ASCII。\u1234您可以通过使用或使用字符串转义替换非 ASCII 字符来完成此操作\U12345678。在你的情况下,你会使用

NSString *strValue=@"\u4F60\u597D";

当然,一旦你的字符串常量是正确的,你可以放弃整个编码的东西,直接使用strValue

于 2012-12-19T00:14:48.130 回答