iOS如何将URL字符串转换为NSString?

3

我有一个问题,需要将我从XML文件中提取的URL字符串转换为NSString

URL字符串看起来很奇怪,但它是符合URL格式的。

%3CTEXTFORMAT%20LEADING%3D%222%22%3E%3CP%20ALIGN%3D%22LEFT%22%3E%3CFONT%20FACE%3D%22Arial%22%20SIZE%3D%2212%22%20COLOR%3D%22%23000000%22%20LETTERSPACING%3D%220%22%20KERNING%3D%220%22%3E%u53F0%u5317%u7E2323141%u65B0%u5E97%u6C11%u6B0A%u8DEF130%u5DF714%u865F5%u6A13%3C/FONT%3E%3C/P%3E%3C/TEXTFORMAT%3E

然而,当我使用stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding方法时,它返回nil。
经过一些实验和研究,似乎这个URL包含%u导致转换URL出现问题,而且这个%u看起来像unicode,但是我尝试删除所有的%u,然后stringByReplacingPercentEscapesUsingEncoding方法会返回一个正确的字符串而没有任何问题。
是否有人知道如何正确地将这个URLstring转换为NSString?

尝试使用NSRegularExpression? - lakshmen
实际上,%u 是非标准的,并且已经被拒绝作为标准,因此 iOS 可能不符合它。您将不得不自己翻译这些字符。http://en.wikipedia.org/wiki/Percent-encoding#Non-standard_implementations - borrrden
1个回答

2

你的urlString中含有Unicode汉字,因此无法转换。

将%u替换为\u即可得到你需要的字符串。

NSString *str=@"%3CTEXTFORMAT%20LEADING%3D%222%22%3E%3CP%20ALIGN%3D%22LEFT%22%3E%3CFONT%20FACE %3D%22Arial%22%20SIZE%3D%2212%22%20COLOR%3D%22%23000000%22%20LETTERSPACING%3D%220%22%20KERNING%3D%220%22%3E%u53F0%u5317%u7E2323141%u65B0%u5E97%u6C11%u6B0A%u8DEF130%u5DF714%u865F5%u6A13%3C/FONT%3E%3C/P%3E%3C/TEXTFORMAT%3E";
str=[str stringByReplacingOccurrencesOfString:@"%u" withString:@"\\u"];
NSString *convertedStr=[str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"converted string is %@ \n",convertedStr);

输出:---------------

converted string is <TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Arial" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">\u53F0\u5317\u7E2323141\u65B0\u5E97\u6C11\u6B0A\u8DEF130\u5DF714\u865F5\u6A13</FONT></P></TEXTFORMAT>

要获取更多信息,请访问此网址
这是中文Unicode字符。 以下是一些代码,可以证明它:

NSString *newStr=@"\u53F0\u5317\u7E2323141\u65B0\u5E97\u6C11\u6B0A\u8DEF130\u5DF714\u865F5\u6A13";
NSLog(@"chinese string is %@",[newStr stringByReplacingPercentEscapesUsingEncoding:NSUTF16StringEncoding]);

输出:---------------------- 台北县23141新店民权路130巷14号5楼

使用谷歌翻译将此字符串转换后可以得到某人的地址。 即:

台北县新店市民权路130巷14号5楼


我可以问一下,在IOS中如何从urlString中提取Unicode字符串? - NelsonPunch
你的答案就在我的回答里,需要找出来。 - Prince Kumar Sharma

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