NSString替换Unicode字符

3

我正在与服务器一起工作,需要将文本下载到我的iOS应用程序中。唯一的问题是:所有像“é à ç”这样的字符都被替换为“\ U008”之类的代码。有没有办法解决这个问题,将此代码替换为正确的字符?

3个回答

4
请尝试使用以下方法解析接收到的文本(textToParse变量):
NSString *encodedString = textToParse;
NSString *decodedString = [NSString stringWithUTF8String:[encodedString cStringUsingEncoding:[NSString defaultCStringEncoding]]];

8
它崩溃了:[NSString stringWithUTF8String:]: NULL cString。 - Pierre

1

我测试了一些编码,NSMacOSRomanStringEncoding 很适合。

我的测试如下:

NSString *encodedString = [NSString stringWithCString:"Você realmente deseja sair da área restrita" encoding:NSMacOSRomanStringEncoding];

请记住,消息必须是C字符串("string"),而不是NSString@"string"


0

您可以获取字符缓冲区并验证每个字符,如下所示:

- (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];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接