標籤:合成 請求 mutable cape 串連 接收 text 沒有 客戶
在做一個HTTPS串連時, 要用戶端合成一段HTTPS地址
如果地址含中文的話程式會crash, 檢查發現原來是中文沒有轉碼的原因
在NSString庫裡面找到了下面兩個方法
- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
試了下, 有效
1 NSString* string1 = @"https://www.cloudsafe.com/檔案夾"; 2 3 NSString* string2 = [string1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 4 NSString* string3 = [string2 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 5 6 NSString* string4 = [string2 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 7 NSString* string5 = [string3 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 8 9 NSString* string6 = [string4 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];10 NSString* string7 = [string5 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
輸出string1-7結果如下
string1:https://www.cloudsafe.com/檔案夾string2:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9string3:https://www.cloudsafe.com/%25E6%2596%2587%25E4%25BB%25B6%25E5%25A4%25B9string4:https://www.cloudsafe.com/檔案夾string5:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9string6:https://www.cloudsafe.com/檔案夾string7:https://www.cloudsafe.com/檔案夾
簡單說下我是如何使用的:
在合成URL後, 給整個String轉碼兩次
1 NSMutableString *address = [[NSMutableString stringWithString:SetNiChengStringWithoutUserNameAndNiCheng] mutableCopy];2 address = [[address stringByAppendingString:app.name] mutableCopy];3 address = [[address stringByAppendingString:@"/"] mutableCopy];4 address = [[address stringByAppendingString:_nameTextField.text] mutableCopy];5 address = [[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] mutableCopy];6 address = [[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] mutableCopy];
伺服器端如何只是簡單儲存, 伺服器接收資料後可以不用轉碼成中文
當用戶端請求這部分資料時, 由用戶端自己解碼就好了
擷取到字串後解碼一次就可以正常顯示為中文了:
1 str = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
解決URL中文亂碼問題