2012-07-01 53 views
0

試圖包含一個轉義Unicode字符串轉換(例如:\ U3400)在U + 20000至U + 2B81F的範圍內形成的URL,但它不工作。 U + 3400到U + 9FFF的範圍工作得很好。轉換的Unicode >> U + 9FFF的形成網址

NSString *string1 = @"\u9FFF"; 
string1 = [string1 stringByReplacingPercentEscapesUsingEncoding:NSUnicodeStringEncoding]; 
NSURL *url1 = [NSURL URLWithString:[NSString stringWithFormat:@"http://en.wikipedia.org/Search?search=%@", string1]]; 
NSLog(@"url1: %@", url1); 

輸出:URL1:http://en.wikipedia.org/Search?search=%E9%BF%BF

NSString *string2 = @"\u20000"; 
string2 = [string2 stringByReplacingPercentEscapesUsingEncoding:NSUnicodeStringEncoding]; 
NSURL *url2 = [NSURL URLWithString:[NSString stringWithFormat:@"http://en.wikipedia.org/Search?search=%@", string2]]; 
NSLog(@"url2: %@", url2); 

輸出:URL2:(空)

基本上,我要的是轉換逃脫統一碼的列表(\ U3400到\ u2B81F)到URL(甚至是NSStrings)。如果還有其他方法可以通過其他字符串轉換手段實現這一點,我會很感激。

回答

1

我不知道爲什麼你試圖去逃避一個Unicode字符,當的NSString已經是UTF-8編碼:

編輯:我知道了!它肯定沒有NSLog(),但它不是(null),這就是最重要的。

const char * str = "\0xF0\0xA0\0x80\0x80"; 
NSString *string2 = [NSString stringWithUTF8String:str]; 
NSURL *url2 = [NSURL URLWithString:[NSString stringWithFormat:@"http://en.wikipedia.org/Search?search=%@", string2]]; 
NSLog(@"url2: %@", string2); 
+0

你說得對CodaFi,去逃避確實是無用的。我跑了你的線,但我仍然得到一個零字符串'\ u20000'('\ u9FFF'確定。) –

+0

也許是因爲\ u2000是一個空格。 – CodaFi

+0

根據此[鏈接](http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=U%2B20000),\ u20000是中國人的性格。在U + 20000到U + 2B81F的整個範圍內都是相同的行爲,這對應於CJK統一表意文字擴展B,C,D和CJK兼容性表意文字增補(2F800-2FA1F)。 –

相關問題