tia*_*mat 1 encoding ios swift2
我有一个包含TextFields的ViewController,我需要将这些值发送到专用的HTTP服务.我主要担心的是编码类型,因为这个应用程序是法语版,可能包含一些重音符号('é','è'等等...)但我还需要正确格式化我的字段,因为它可能包含空格好....
我尝试使用不同的方法,但我仍然在服务器端编码错误.
这是我的代码示例:
let url_to_request = "http://11.22.33.44:8080/SRV/addRepertoire"
var params = "owner=\(User.sharedInstance.email)&adresse=\(adresse.text!)&nom=\(nom.text!)&telephone=\(telephone.text!)&commentaires=\(commentaires.text!)"
//trying to encode in ISO-8859-1
let dt = NSString(CString: params, encoding: NSISOLatin1StringEncoding)
//preparing string to be used in a NSURL
let final_url = dt!.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
print("URL loadRepertoire: \(url_to_request+"?"+final_url!)")
Run Code Online (Sandbox Code Playgroud)
例如,字段"nom"包含"bébé",其编码为"b%C4%82%C5%A0b%C4%82%C5%A0",而我的服务器期望"b%E9b%E9"
EDIT2:
我试着使用以下内容:
let url_to_request = "http://11.22.33.44:8080/SRV/addRepertoire"
let params = "owner=\(User.sharedInstance.email)&adresse=\(adresse.text!)&nom=\(nom.text!)&telephone=\(telephone.text!)&commentaires=\(commentaires.text!)"
let tmp_url = url_to_request + "?" + params
let final_url = tmp_url.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!
print("URL addRepertoire: \(final_url)")
Run Code Online (Sandbox Code Playgroud)
但结果仍然是:
b%C3%83%C2%A9b%C3%83%C2%A9, diplayed bébé instead of bébé
Run Code Online (Sandbox Code Playgroud)
stringByAddingPercentEncodingWithAllowedCharacters 总是使用UTF-8表示,所以我担心你可能需要自己动手.
extension String {
func stringByAddingPercentEncodingForISOLatin1() -> String? {
let allowedCharacterSet = NSCharacterSet(charactersInString:
"0123456789"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "_-.~"
+ "=&" //You'd better remove this and encode each param.
)
if let data = self.dataUsingEncoding(NSISOLatin1StringEncoding) {
var result = ""
for i in 0..<data.length {
let ch = UnsafePointer<UInt8>(data.bytes)[i]
if ch >= 0x80 || !allowedCharacterSet.characterIsMember(unichar(ch)) {
result += String(format: "%%%02X", ch)
} else {
result.append(UnicodeScalar(ch))
}
}
return result
} else {
return nil
}
}
}
"bébé".stringByAddingPercentEncodingForISOLatin1()! //->"b%E9b%E9"
Run Code Online (Sandbox Code Playgroud)