我需要在UILabel中显示下标和上标(只有阿拉伯数字)。数据取自XML文件。以下是XML文件的片段:
<text><![CDATA[Hello World X\u00B2 World Hello]]></text>
它应该显示X2 (2作为上标)。当我从NSXMLParser中读取字符串并将其显示在UILabel中时,它将其显示为X\u00B2。有没有关于如何让它工作的想法?
发布于 2012-03-03 01:12:03
我认为您可以这样做,假设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;
}
我还没有机会尝试一下,但我认为基本的方法是可行的
发布于 2012-03-03 00:22:02
\u00B2
不是任何一种用于字符的XML编码。显然,您的数据源已经定义了自己的编码方案(坦率地说,这是非常愚蠢的,因为XML能够使用CDATA块之外的实体直接对其进行编码)。
在任何情况下,您都必须编写自己的解析器来处理\u####
并将其转换为正确的字符。
发布于 2012-03-03 01:15:04
我问了我的同事这个问题,他给了我一个很好的简单的解决办法。我在这里描述它,以防其他人也被困在这里。
首先转到this link。它有一个包含所有下标和上标的列表。例如,在我的例子中,我点击了“上标0”。在下面的详细介绍"superscript 0“的超文本标记语言页面中,转到"Java Data”部分并复制"⁰“。您可以将其直接放在XML中,或者在obj-c中编写一个简单的正则表达式,将\u00B2替换为"⁰“。你会得到很好的X⁰。对您可能想要显示的任何其他上标或下标执行相同的操作。
https://stackoverflow.com/questions/9542159
复制