ios特殊字符问题
Posted
技术标签:
【中文标题】ios特殊字符问题【英文标题】:ios special characters issue 【发布时间】:2012-09-24 10:30:05 【问题描述】:在我的应用程序中,当我尝试将附加字符串设置为 UIlabel 时,未显示特殊字符。请帮我解决这个问题。
谢谢
【问题讨论】:
【参考方案1】:如果你的键盘上有一个欧元字符,你可以直接使用它:
[lLabel setText:@"€"];
否则使用 Unicode 转义:
[lLabel setText:@"\u20AC"];
添加 Foundation 框架和 NSString 类不知道像“¿euro¿”这样的转义序列,因此您必须手动替换它:
NSString *s = @"abc ¿euro¿ def";
NSString *d = [s stringByReplacingOccurrencesOfString:@"¿euro¿" withString:@"\u20AC"];
【讨论】:
欧元、倒问号等特殊符号来自网络服务,为此我使用了 utf8 字符串编码。因此,当我尝试显示它们时,这些字符没有显示,所以在这种情况下,我无法对这些值进行硬编码,因为这些值是动态的。对于上述情况,倒置问号未显示,我使用了以下链接,但这不起作用iphonedevsdk.com/forum/iphone-sdk-development/…。你能告诉我如何解决这个问题 @Saikiran:查看我的更新答案。您还应该确保您的 Web 服务中的字符串确实使用了“倒置问号”字符 (Unicode U+00BF),而不是仅显示为倒置问号的其他字符。 :我很惊讶地发现在数据库中我将欧元符号设置为自定义名称,但在 Web 服务响应中我收到的是倒置问号而不是欧元符号,我无法替换它您提到的带有 unicode 字符的倒置问号 @Saikiran:我假设字符只是显示为倒置问号。您必须找出您的 Web 服务字符串究竟使用了哪些字符。 仍然没有解决方案.. 尝试了不同的编码风格,但没有找到任何解决方案【参考方案2】://Conevrt the string utf-8 format
[yourstringvariabel UTF8String];
【讨论】:
【参考方案3】:使用NSISOLatinStringEncoding
解决了这个问题。
【讨论】:
如何对字符串变量使用 NSISOLatinStringEncoding?就像遇到问题一样。【参考方案4】:将字符串转换为 UTF-8,然后将其设置为标签文本。
[label setText:[NSString stringWithFormat:@"%s",[@"your_string" UTF8String]]];
[编辑]
我对此进行了测试,并且无需将字符串转换为 UTF-8 即可正常工作!
label.text = @"¿euro¿";
请确保您的服务器的响应设置为 UTF-8 并且它应该修复它。我遇到了同样的问题,我从 UTF8 的服务器获取字符串 - NSUTF8StringEncoding!我改变了它,其他一切都很好!
例如我这样做:
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
request.defaultResponseEncoding = NSUTF8StringEncoding;
【讨论】:
这两种方法都行不通。dataUsingEncoding:
返回 NSData *
,UTF8String
返回 const char *
。但是[UILabel setText:]
需要NSString *
参数。
@Martin 我一直在使用它,但不是直接在字符串上使用,而是从服务器返回的字符串,它工作正常。确保将服务器响应类型设置为 NSUTF8StringEncoding。理想情况下,打印 NSLog 时,它可能会打印无效字符,但如果将其分配给 Label,它将正确显示。
我的意思是你不能使用dataUsingEncoding
和UTF8String
的结果作为[UILabel setText:]
的参数。您编写的语句将导致编译器警告关于不兼容类型,并在运行时崩溃。
你是对的。我之前没有测试过。更正了答案。如果您从服务器获取字符串,则不必显式使用 UTF-8。只需将服务器的响应默认编码设置为 UTF-8 即可。以上是关于ios特殊字符问题的主要内容,如果未能解决你的问题,请参考以下文章