Objective-C中的字符串转换

时间:2010-09-06 08:21:33

标签: iphone objective-c

在我的程序中,我允许用户在文本字段中输入一些单词。然后我的程序将使用这些单词形成一个html字符串。然后该字符串将在NSURL中使用,因此我可以连接到该网站。

此方法适用于英语单词。但是当我在那里输入一些中文(或韩文)时,我就不行了。因此,我认为我需要在将输入数据传递给NSURL之前对其进行转换。但是我找不到办法做到这一点。 以下是我的代码的示例。

NSString *searchedString = theSearchBar.text;

NSString *urlToBeSearched = [[NSString alloc] 
     initWithFormat:@"http://www.awebsite.com/search/%@", 
     searchedString];
NSURLRequest *urlRequest = [[NSURLRequest alloc] 
    initWithURL:[NSURL URLWithString:urlToBeSearched]
    cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:50];
NSURLConnection *tempCon =[[NSURLConnection alloc] initWithRequest:urlRequest
             delegate:self];

然后当然会在以后发布它们。

例如,当searchString =你好时,urlLink将为http://www.awebsite.com/search/你好。 NSURLConnection不喜欢这样,会给我“Bad Url”错误。 但是,如果urlLink为“%E4%BD%A0%E5%A5%BD”,它将为我提供正确的链接。

2 个答案:

答案 0 :(得分:2)

URI中允许的字符集几乎限于US-ASCII的子集(请参阅RFC2396)。这意味着您的中文字符必须在URI中进行百分比转义。 NSURL +URLWithString:的文档说字符串必须符合RFC,因此您需要在调用该方法之前转义字符串百分比。

幸运的是,NSString有一个允许你执行名为-stringByAddingPercentEscapesUsingEncoding:的方法。您仍然需要选择合适的编码,您选择的编码取决于服务器如何解码URL字符串。最简单的选择可能是在两端都使用UTF-8。您需要执行以下操作:

NSString* searchedString = [theSearchBar.text stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
NSString* urlToBeSearched = [NSString stringWithFormat:@"http://www.awebsite.com/search/%@", searchedString];

// everything else the same, except you don't need to release urlToBeSearched

答案 1 :(得分:0)

您是否尝试对搜索字符串进行编码?

[NSString stringByAddingPercentEscapesUsingEncoding:/encoding-of-choice/];

不确定您将使用哪种编码用于中文字符。