【发布时间】:2011-07-15 09:00:41
【问题描述】:
我正在使用服务器,我必须将文本下载到我的 iOS 应用程序。唯一的问题:例如,所有像“é à ç”这样的字符都被替换为“\U008”。有没有办法解决这个问题,用正确的字符替换这段代码?
【问题讨论】:
标签: ios unicode nsstring character
我正在使用服务器,我必须将文本下载到我的 iOS 应用程序。唯一的问题:例如,所有像“é à ç”这样的字符都被替换为“\U008”。有没有办法解决这个问题,用正确的字符替换这段代码?
【问题讨论】:
标签: ios unicode nsstring character
尝试用这个解析接收到的文本(textToParse 变量):
NSString *encodedString = textToParse;
NSString *decodedString = [NSString stringWithUTF8String:[encodedString cStringUsingEncoding:[NSString defaultCStringEncoding]]];
【讨论】:
我测试了一些编码,NSMacOSRomanStringEncoding 很合适。
我的测试是:
NSString *encodedString = [NSString stringWithCString:"Você realmente deseja sair da área restrita" encoding:NSMacOSRomanStringEncoding];
请记住,消息必须是 C 字符串 ("string") 而不是 NSString(@"string")
【讨论】:
您可以像这样获取字符缓冲区并验证每个字符:
- (NSString *) removeUnicode:(NSString *) unicodeString {
NSUInteger len = [unicodeString length];
unichar buffer[len+1];
[unicodeString getCharacters:buffer range:NSMakeRange(0, len)];
unichar okBuffer[len+1];
int index = 0;
for(int i = 0; i < len; i++) {
if(buffer[i] < 128) {
okBuffer[index] = buffer[i];
index = index + 1;
}
}
NSString *removedUnicode = [[NSString alloc] initWithCharacters:okBuffer length:index];
return removedUnicode;
}
或者您可以使用此示例:
NSCharacterSet *notAllowedChars = [[NSCharacterSet characterSetWithCharactersInString:[NSCharacterSet alphanumericCharacterSet]] invertedSet];
stringWithOutUnicode = [[stringWithUnicode componentsSeparatedByCharactersInSet:notAllowedChars] componentsJoinedByString:@""];
您可以创建自己的有效字符集并获取不允许的字符
NSString *allowedCharacters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
NSCharacterSet *notAllowedChars = [[NSCharacterSet characterSetWithCharactersInString: allowedCharacters] invertedSet];
【讨论】: