2017-03-20 17 views
1

は、私はそれは私がstringByAddingPercentEncodingWithAllowedCharactersを使用することを提案、CFURLCreateStringByAddingPercentEscapesはiOS10に廃止されました方法を知っているが、私はどのように私は、次のように同じことを行うためにstringByAddingPercentEncodingWithAllowedCharactersを使用することができ、UTF-8を使用していないんSwift3 iOS10のCFURLCreateStringByAddingPercentEscapesの代わりに使用しますか?

extension String { 
    var gbkEncoded: String { 
     let cfEnc = CFStringEncodings.GB_18030_2000 
     return CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, self as CFString!, nil, nil, CFStringEncoding(cfEnc.rawValue)) as String 
    } 
} 

答えて

1

私は現代のWeb標準ではUTF-8以外のものは推奨されていないため、アップルはCFURLCreateStringByAddingPercentEscapesの代わりにAppleを提供しないだろうと懸念しています。

あなた自身で行う必要があります。例:

extension CharacterSet { 
    static let rfc3986Unreserved = CharacterSet(charactersIn: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-._~") 
} 

extension String.Encoding { 
    static let gb_18030_2000 = String.Encoding(rawValue: CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(CFStringEncodings.GB_18030_2000.rawValue))) 
} 

extension String { 
    func addingPercentEncoding(withAllowedCharacters characterSet: CharacterSet, using encoding: String.Encoding) -> String { 
     let stringData = self.data(using: encoding, allowLossyConversion: true) ?? Data() 
     let percentEscaped = stringData.map {byte->String in 
      if characterSet.contains(UnicodeScalar(byte)) { 
       return String(UnicodeScalar(byte)) 
      } else if byte == UInt8(ascii: " ") { 
       return "+" 
      } else { 
       return String(format: "%%%02X", byte) 
      } 
     }.joined() 
     return percentEscaped 
    } 

    var gbkEncoded: String { 
     return self.addingPercentEncoding(withAllowedCharacters: .rfc3986Unreserved, using: .gb_18030_2000) 
    } 
} 

print("互联网".gbkEncoded) //->%BB%A5%C1%AA%CD%F8 
関連する問題