首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从iOS到NSString的转换

从iOS到NSString的转换
EN

Stack Overflow用户
提问于 2012-06-14 05:02:50
回答 3查看 1.1K关注 0票数 1

我使用NSXMLParser将XML解析到我的应用程序,但编码类型有问题。例如,下面是其中一个提要。它看起来像这样。“

代码语言:javascript
复制
\U2026Some random text from the xml feed\U2026

我目前使用的是编码类型:

代码语言:javascript
复制
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

我应该使用哪种编码类型将\U2026转换为椭圆(...) ??

EN

回答 3

Stack Overflow用户

发布于 2012-06-14 05:49:15

这里的答案是你完蛋了。他们对XML使用了非标准编码,但是如果他们真的想要文字\U2026呢?假设您添加了一个解码器来处理所有\UXXXX\uXXXX编码。如果另一个提要希望数据是文字\U2026,会发生什么情况

你是第一选择,最好的办法就是把这个提要修好。如果需要对数据进行编码,则需要使用适当的HTML实体或数字引用。

作为退路,我会将解码器与XML解析器隔离开来。不要仅仅因为得到了不一致的数据就创建一个不一致的XML解析器。有一个只在有问题的提要上运行的后处理器。

如果你一定要有一个解码器,那么还有更多的坏消息。没有内置的解码器,你需要在网上找到一个类别或者自己写一个。

经过一番探索之后,我想Using Objective C/Cocoa to unescape unicode characters, ie \u1234可能会为你工作。

票数 1
EN

Stack Overflow用户

发布于 2012-06-14 05:51:24

好了,这里有一小段代码,它适用于任何unicode代码点:

代码语言:javascript
复制
NSString *stringByUnescapingUnicodeSymbols(NSString *input)
{
    NSMutableString *output = [NSMutableString stringWithCapacity:[input length]];

    // get the UTF8 string for this string...
    const char *UTF8Str = [input UTF8String];

    while (*UTF8Str) {
        if (*UTF8Str == '\\' && tolower(*(UTF8Str + 1)) == 'u')
        {
            // skip the next 2 chars '\' and 'u'
            UTF8Str += 2;

            // make sure we only read 4 chars
            char tmp[5] = { UTF8Str[0], UTF8Str[1], UTF8Str[2], UTF8Str[3], 0 };
            long unicode = strtol(tmp, NULL, 16); // remember that Unicode is base 16

            [output appendFormat:@"%C", unicode];

            // move on with the string (making sure we dont miss the end of the string
            for (int i = 0; i < 4; i++) {
                if (*UTF8Str == 0)
                    break;
                UTF8Str++;
            }
        }
        else 
        {
            if (*UTF8Str == 0)
                break;

            [output appendFormat:@"%c", *UTF8Str];
        }


        UTF8Str++;
    }

    return output;
}
票数 1
EN

Stack Overflow用户

发布于 2012-06-14 05:28:52

您只需将引号上的文字'\U2026‘替换,然后用NSUTF8StringEncoding编码将其编码为NSData

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11023248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档