在ISO-8859-1中编码NSURL

时间:2016-07-18 12:13:09

标签: ios encoding swift2

我有一个包含TextFields的ViewController,我需要将这些值发送到专用的HTTP服务。 我主要担心的是编码类型,因为这个应用程序是法语版,可能包含一些重音符号('é','è'等等...)但我还需要正确格式化我的字段,因为它可能包含空格以及....

我尝试使用不同的方法,但我在服务器端仍然有错误的编码。

这是我的代码示例:

        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)")

例如,字段“nom”包含“bébé”,其编码为“b%C4%82%C5%A0b%C4%82%C5%A0”,而我的服务器期待“b%E9b%E9”

EDIT2:

我尝试使用以下内容:

b%C3%83%C2%A9b%C3%83%C2%A9, diplayed bébé instead of bébé

但结果仍然是:

    def game():
       #This selects 5 community cards from the pick_community function
        community = pick_community(5)
        card_4  = community[3]
        card_5  = community[4]
        first_3 = community[0:3]
        return first_3

        river = raw_input("If you are done with the round hit enter:" )
        try:
            if river =="":
                return card_4
        except:
            print "Dont cheat man"
            exit()

3 个答案:

答案 0 :(得分:5)

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" 总是使用UTF-8表示,所以我担心您可能需要自己动手。

{{1}}

答案 1 :(得分:0)

以下是Swift 4中的解决方案:

extension String {

  // Url percent encoding according to RFC3986 specifications
  // https://tools.ietf.org/html/rfc3986#section-2.1
  func urlPercentEncoded(withAllowedCharacters allowedCharacters: 
    CharacterSet, encoding: String.Encoding) -> String {
    var returnStr = ""

    // Compute each char seperatly
    for char in self {
      let charStr = String(char)
      let charScalar = charStr.unicodeScalars[charStr.unicodeScalars.startIndex]
      if allowedCharacters.contains(charScalar) == false,
        let bytesOfChar = charStr.data(using: encoding) {
        // Get the hexStr of every notAllowed-char-byte and put a % infront of it, append the result to the returnString
        for byte in bytesOfChar {
          returnStr += "%" + String(format: "%02hhX", byte as CVarArg)
        }
      } else {
        returnStr += charStr
      }
    }

    return returnStr
  }

}

用法:

"aouäöü!".urlPercentEncoded(withAllowedCharacters: .urlQueryAllowed,
                                         encoding: .isoLatin1) 
// Results in -> "aou%E4%F6%FC!"

答案 2 :(得分:0)

对于Objective-C:

/login.py
subprocess.popen('python','main.py')
quit()
/main.py
subprocess.popen('python','login.py')