【问题标题】:convert ampersand character to utf 8将 & 字符转换为 utf 8
【发布时间】:2016-04-03 19:28:26
【问题描述】:

我向我的服务器发送带有数据的发布请求:

var syncData = "data=Hello&World"
let urlRequest = NSMutableURLRequest(URL: NSURL(string: url)!, cachePolicy:  NSURLRequestCachePolicy.ReloadIgnoringCacheData, timeoutInterval: NSTimeInterval(60))

urlRequest.HTTPMethod = "POST"
urlRequest.HTTPBody = syncData.dataUsingEncoding(NSUTF8StringEncoding)

但是服务器无法解码&(ampersand) 字符的问题。在服务器上,我只得到“你好”这个词。这不是服务器问题。因为我试图用 java、python 和 curl 发送这个字符串。
一切正常。

我试过这个: NSXMLParser problem with "&"(Ampersand) character

但这无济于事......有什么想法吗?

【问题讨论】:

  • 你能澄清一下到底发生了什么吗?
  • 服务器只解码部分字符串。例如,如果字符串是 Hello&World,则在发布数据服务器中仅解码 hello...
  • 你的数据没有正确编码,& 有特殊含义,需要转义,所以你的字符串应该是data=Hello%26World

标签: ios swift encoding


【解决方案1】:

正如穆萨所说。解决方案是:

let customAllowedSet =  NSCharacterSet(charactersInString:"=\"#%/<>?@\\^`{|}&").invertedSet
    syncData = syncData.stringByAddingPercentEncodingWithAllowedCharacters(customAllowedSet)!

    urlRequest.HTTPBody = syncData.dataUsingEncoding(NSUTF8StringEncoding)

【讨论】:

    【解决方案2】:

    试试

    var sync = syncData.stringByReplacingOccurrencesOfString("&", withString: " ")
    urlRequest.HTTPBody = sync.dataUsingEncoding(NSUTF8StringEncoding)
    

    将同步变量放在同步数据变量下,并使用新的同步变量将您的 urlRequest 替换为上述变量

    【讨论】:

    • 是的,replace 是解决方案,但它是非常糟糕的解决方案 :( 我需要一些独特的字符来替换。因为我不仅有 url,我也有大文本,可以包含 & 和空格
    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 2013-03-02
    • 1970-01-01
    • 2015-06-05
    • 2012-12-05
    • 2012-02-20
    • 2015-04-29
    • 1970-01-01
    相关资源
    最近更新 更多