我使用NSXMLParser将XML解析到我的应用程序,但编码类型有问题。例如,下面是其中一个提要。它看起来像这样。“
\U2026Some random text from the xml feed\U2026我目前使用的是编码类型:
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];我应该使用哪种编码类型将\U2026转换为椭圆(...) ??
发布于 2012-06-14 05:49:15
这里的答案是你完蛋了。他们对XML使用了非标准编码,但是如果他们真的想要文字\U2026呢?假设您添加了一个解码器来处理所有\UXXXX和\uXXXX编码。如果另一个提要希望数据是文字\U2026,会发生什么情况
你是第一选择,最好的办法就是把这个提要修好。如果需要对数据进行编码,则需要使用适当的HTML实体或数字引用。
作为退路,我会将解码器与XML解析器隔离开来。不要仅仅因为得到了不一致的数据就创建一个不一致的XML解析器。有一个只在有问题的提要上运行的后处理器。
如果你一定要有一个解码器,那么还有更多的坏消息。没有内置的解码器,你需要在网上找到一个类别或者自己写一个。
经过一番探索之后,我想Using Objective C/Cocoa to unescape unicode characters, ie \u1234可能会为你工作。
发布于 2012-06-14 05:51:24
好了,这里有一小段代码,它适用于任何unicode代码点:
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;
}发布于 2012-06-14 05:28:52
您只需将引号上的文字'\U2026‘替换,然后用NSUTF8StringEncoding编码将其编码为NSData
https://stackoverflow.com/questions/11023248
复制相似问题