2010-09-06 33 views
0

在我的程序中,我允許用戶在文本框中輸入一些單詞。然後我的程序將使用這些單詞來形成一個html字符串。該字符串將在NSURL中使用,以便我可以連接到網站。Objective-C中的字符串轉換

此方法適用於英語單詞。但是當我在那裏輸入一些中文(或韓文)時,我不工作。因此我相信我需要在將輸入數據傳遞給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]; 

然後當然在稍後發佈它們。

例如,當searchingString =你好時,urlLink將是http://www.awebsite.com/search/你好。 NSURLConnection不喜歡,並會給我「壞的網址」錯誤。 但是,如果urlLink是「%E4%BD%A0%E5%A5%BD」,它會給我正確的鏈接。

+0

您可以發佈您的* real *代碼。這不會編譯,你永遠不會使用searledString。 – JeremyP 2010-09-06 09:23:56

回答

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 
+0

非常感謝。很棒。 – Draco 2010-09-06 13:09:35

+0

還有一個問題。如何將SearchingString解碼爲中文? – Draco 2010-09-06 13:18:42

+0

您需要撤消操作。在您的服務器上,您應該關閉前端,以便在「搜索/」後只有位,然後您需要反轉URL編碼。你如何做這取決於你的服務器端寫入的語言。 – JeremyP 2010-09-06 15:02:12

0

你試過編碼你的搜索字符串嗎?

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

不知道會雖然使用的編碼你中國文字。