Ios 将文本添加到字典并发送到服务器时,重音转换错误
我有一组词汇表:[[String:String]]。每个单词都包含一个法语字符串参数文本 当我将此数组放入字典:[String:AnyObject]中时,字符串文本参数中的重音符号将转换为unicode格式 例如,ébeen\U00e9 我知道我的字符串是正常的,但它在服务器中是错误的。当我向服务器发送此文本时: toulousain的便携式设备,他收到toulousain的便携式设备。我知道服务器很好,问题不是从这里来的 我相信这个问题来自我的发音args的AnyObject类型,但我不知道如何解决 这是我的密码:Ios 将文本添加到字典并发送到服务器时,重音转换错误,ios,string,swift,non-ascii-characters,Ios,String,Swift,Non Ascii Characters,我有一组词汇表:[[String:String]]。每个单词都包含一个法语字符串参数文本 当我将此数组放入字典:[String:AnyObject]中时,字符串文本参数中的重音符号将转换为unicode格式 例如,ébeen\U00e9 我知道我的字符串是正常的,但它在服务器中是错误的。当我向服务器发送此文本时: toulousain的便携式设备,他收到toulousain的便携式设备。我知道服务器很好,问题不是从这里来的 我相信这个问题来自我的发音args的AnyObject类型,但我不知道如
var args: [String:AnyObject] = [
"action":"share",
"id": NSNumber(longLong: id)
]
var shareOn = [[String:String]]()
if let sharers = User.currentUser?.sharers {
for (index, object) in enumerate(sharers) {
if object.enabled == true {
var sharerContent: [String:String] = ["sharerId": object.sharerId, "cnxId": String(object.cnxId)]
if object.shareAsImageEnable == true {
sharerContent["shareAsImage"] = "true"
}
if object.mustSpecifyShareText == true {
var text : String! = (title != nil) ? title : ""
if object.sharerId.lowercaseString.rangeOfString("twitter") != nil {
let maxLength = 140 - 27 // Twitter limit - max URL long
if text.length > maxLength {
let index: String.Index = advance(text.startIndex, maxLength-3)
text = text.substringToIndex(index) + "... http://ppo.az/..."
} else {
text = text + " http://ppo.az/..."
}
}
sharerContent["text"] = text
}
shareOn.append(sharerContent)
}
}
}
println(shareOn)
args["shareOn"] = shareOn
println(args)
以及println的结果:
printlnshareOn=>重音正常=>
[[sharerId:facebook,cnxId:4230821,shareAsImage:true,text:Le kit de réparation de portable est toulousain]]
printlnargs=>重音不正常=>
[操作:share,id:4049850929,shareOn:
{
cnxId=4150811;
shareAsImage=true;
sharerId=facebook;
text=Le kit de r\u00e9 toulousain便携式设备的分离;
}
]
以及我的路由器和我的函数makeRequest:
import UIKit
import Alamofire
import OAuthSwift
enum Router: URLRequestConvertible {
static let baseURLString: String! = Global.kClientAPIURL
static var oauthClient: OAuthSwiftClient!
case Login([String: AnyObject])
case LoginSocial([String: AnyObject])
case Profil([String: AnyObject])
case GetCompilation([String: AnyObject])
case GetSavedSearch([String: AnyObject])
case sharePost([String: AnyObject])
var URLRequest: NSURLRequest {
let (method: Alamofire.Method, path: String, parameters : [String: AnyObject]?) = {
switch self {
case .Login(let params):
return (.POST, "api/1/login", params)
case .LoginSocial(let params):
return (.POST, "api/1/login-with-social-account", params)
case .Profil(let params):
return (.GET, "api/1/profile", params)
case .GetCompilation(let params):
return (.GET, "api/1/compilation", params)
case .GetSavedSearch(let params):
return (.GET, "api/1/search", params)
case .sharePost(let params):
return (.POST, "api/1/post", params)
}
}()
let URL = NSURL(string: Router.baseURLString)!
let URLWithPath = URL.URLByAppendingPathComponent(path)
let auth = OAuthSwiftClient.authorizationHeaderForMethod(method.rawValue,
url: URLWithPath,
parameters: parameters!,
credential: Router.oauthClient.credential)
let URLRequest = makeRequest(URLWithPath, method.rawValue, ["Authorization" : auth], parameters!, NSUTF8StringEncoding)
return URLRequest
}
}
func makeRequest(URL: NSURL, method: String, headers: [String : String], parameters: Dictionary<String, AnyObject>, dataEncoding : NSStringEncoding) -> NSMutableURLRequest {
var request = NSMutableURLRequest(URL: URL)
request.HTTPMethod = method
for (key, value) in headers {
request.setValue(value, forHTTPHeaderField: key)
}
let charset = CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(dataEncoding))
var nonOAuthParameters = parameters.filter { key, _ in !key.hasPrefix("oauth_") }
if nonOAuthParameters.count > 0 {
if request.HTTPMethod == "GET" || request.HTTPMethod == "POST" {
let queryString = nonOAuthParameters.urlEncodedQueryStringWithEncoding(dataEncoding)
request.URL = URL.URLByAppendingQueryString(queryString)
request.setValue("application/x-www-form-urlencoded; charset=\(charset)", forHTTPHeaderField: "Content-Type")
}
else {
var error: NSError?
if let jsonData: NSData = NSJSONSerialization.dataWithJSONObject(nonOAuthParameters, options: nil, error: &error) {
request.setValue("application/json; charset=\(charset)", forHTTPHeaderField: "Content-Type")
request.HTTPBody = jsonData
}
else {
println(error!.localizedDescription)
}
}
}
return request
}
将é转换为\U00e9不是问题,它是的一部分,表示:
任何字符都可以转义。如果字符位于基本
多语言平面U+0000到U+FFFF,则可能是
表示为六个字符的序列:一个反向索利多金币,后跟
由小写字母u,后跟四个十六进制数字
对角色的代码点进行编码。十六进制字母A
F可以是大写或小写。例如,一个字符串包含
只有一个反向索利多士字符可以表示为
\u005C
如果您的服务器无法理解它,您的服务器不符合规范是一个问题。您的服务器数据库是什么,统一支持的级别是什么。我在Obj-C中有相同的应用程序,服务器可以正常工作,所以我猜问题不是来自它。我在Obj-C中有相同的应用程序,服务器可以正常工作,所以我猜问题出在哪里不是从它来的。