我正在通过使用 UITextField 获取输入来使用字符串中的特殊字符进行 api 调用,但 alamofire 会自动将其更改为一些代码

Posted

技术标签:

【中文标题】我正在通过使用 UITextField 获取输入来使用字符串中的特殊字符进行 api 调用,但 alamofire 会自动将其更改为一些代码【英文标题】:I am making an api call using special character in string by taking input using UITextField but alamofire is automatically changing it to some code 【发布时间】:2017-11-01 06:10:04 【问题描述】:

下面提到的是我用来进行 api 调用的参数

["password": "123456", "app_version": "1.0", "email": "problem’@swift.com", "device_token": "xxxxxxxxxxxxxxxxxxxxxxx", "device_type": "0"]

这是我后台的回复

SUCCESS: 
message = "Data not valid";
postedData =     
    "app_version" = "1.0";
    "device_token" = xxxxxxxxxxxxxxxxxxxxxxx;
    "device_type" = 0;
    email = "problem\U2019@swift.com";
    password = 123456;
;
status = 0;
"validation_errors" =     
    email =         (
        "The email must be a valid email address."
    );
;

我应该如何消除这个错误。 这是我使用 Alamofire 进行 api 调用的方法

func emailRegistration( email : String, deviceID: String, deviceType: String, appVersion: String, password: String )

    let urlString = BaseURL + "login"

    let params =
        [
            "email"              :  email,
            "device_token"       :  deviceID,
            "device_type"        :  deviceType,
            "app_version"        :  appVersion,
            "password"           :  password

            ]
    request(urlString, method: .post, parameters: params).validate()

    Alamofire.request(urlString, method: .post, parameters: params).validate()
        .responseJSON  responseObject in
            print(responseObject)
            if responseObject.result.isSuccess 
                let resJson = responseObject.result.value
                NotificationCenter.default.post(name: Notification.Name(rawValue: NotifRequestSuccess.emailRegistration.rawValue), object: nil, userInfo: ["data": resJson])
            
            if responseObject.result.isFailure 
                let error : Error = responseObject.result.error!
                NotificationCenter.default.post(name: Notification.Name(rawValue: NotifRequestError.emailRegistration.rawValue), object: responseObject, userInfo: nil)
                //debug//print(responseObject)
            
    

【问题讨论】:

@Sulthan 更改在电子邮件 ID 中。这就是我的后端接收数据的方式。他在收到它时将它退还给我。当我使用特殊字符时,电子邮件会自行更改 您似乎将实际存在的内容与调试器显示的内容混淆了。 我的服务器显示无效电子邮件错误。但是对于通过 android 的相同值,它工作正常。我认为我的结果有一个错误。 【参考方案1】:

Alamofire 正确处理字符串,转义是 JSON 编码的一部分。您服务器上的 JSON 解析器负责解码。

来自JSON RFC:

2.5。字符串

字符串的表示类似于 C 系列编程语言中使用的约定。字符串以引号开头和结尾。除了必须转义的字符外,所有 Unicode 字符都可以放在引号内:引号、反斜线和控制字符(U+0000 到 U+001F)。

任何字符都可以转义。

【讨论】:

以上是关于我正在通过使用 UITextField 获取输入来使用字符串中的特殊字符进行 api 调用,但 alamofire 会自动将其更改为一些代码的主要内容,如果未能解决你的问题,请参考以下文章

如何实现此功能以在 UITextField 中输入 DOB

使用在 UITextField 中输入的值 [重复]

获取没有文本字段/视图的键盘输入

UITextField 上的强密码覆盖

IOS - 获取UITextField的输入文本

通过循环遍历 UITextField 中的值模式来测试应用程序