我需要在UILabel中显示下标和上标(只有阿拉伯数字)。数据来自XML文件。这是XML文件的片段:
<text><![CDATA[Hello World X\u00B2 World Hello]]></text>
它应该显示X2(2为上标)。当我从NSXMLParser读取字符串并将其显示在UILabel中时,它将其显示为X \ u00B2。关于如何使其发挥作用的任何想法?
答案 0 :(得分:2)
我认为你可以这样做,假设CDATA内容已被读入NSString并传入此函数:
-(NSString *)removeUnicodeEscapes:(NSString *)stringWithUnicodeEscapes {
unichar codeValue;
NSMutableString *result = [stringWithUnicodeEscapes mutableCopy];
NSRange unicodeLocation = [result rangeOfString:@"\\u"];
while (unicodeLocation.location != NSNotFound) {
// Get the 4-character hex code
NSRange charCodeRange = NSMakeRange(unicodeLocation.location + 2, 4);
NSString *charCode = [result substringWithRange:charCodeRange];
[[NSScanner scannerWithString:charCode] scanHexInt:&codeValue];
// Convert it to an NSString and replace in original string
NSString *unicodeChar = [NSString stringWithFormat:%C", codeValue];
NSRange replacementRange = NSMakeRange(unicodeLocation.location, 6);
[result replaceCharactersInRange:replacementRange withString:unicodeChar];
unicodeLocation = [result rangeOfString:@"\\u"];
}
return result;
}
我没有机会尝试这一点,但我认为基本方法可行
答案 1 :(得分:1)
\u00B2
不是任何字符的XML编码。显然你的数据源已经定义了他们自己的编码方案(坦率地说,这是非常愚蠢的,因为XML能够使用CDATA块之外的实体直接对这些编码进行编码)。
在任何情况下,您都必须编写自己的解析器来处理\u####
并将其转换为正确的字符。
答案 2 :(得分:0)
我向同事提问,他给了我一个简单明了的解决方法。我在这里描述它,以防其他人也陷入困境。
首先转到this link。它有一个所有下标和上标的列表。例如,就我而言,我点击了“上标0”。在以下详细说明“上标0”的HTML页面中,转到“Java数据”部分并复制“⁰”。您可以直接将其放在XML中,也可以在obj-c中编写一个简单的正则表达式,用“⁰”替换\ u00B2。你会得到很好的X⁰。对您可能想要显示的任何上标或下标执行相同操作。