2017-01-05 3 views

Répondre

2

Le codage en pourcentage sur d'autres codages que UTF-8 n'est pas considéré comme un moyen recommandé dans www world, il se peut donc que vous deviez implémenter une telle conversion par vous-même.

Il est peut-être quelque chose comme ceci:

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

extension String { 
    func bytesByRemovingPercentEncoding(using encoding: String.Encoding) -> Data { 
     struct My { 
      static let regex = try! NSRegularExpression(pattern: "(%[0-9A-F]{2})|(.)", options: .caseInsensitive) 
     } 
     var bytes = Data() 
     let nsSelf = self as NSString 
     for match in My.regex.matches(in: self, range: NSRange(0..<self.utf16.count)) { 
      if match.rangeAt(1).location != NSNotFound { 
       let hexString = nsSelf.substring(with: NSMakeRange(match.rangeAt(1).location+1, 2)) 
       bytes.append(UInt8(hexString, radix: 16)!) 
      } else { 
       let singleChar = nsSelf.substring(with: match.rangeAt(2)) 
       bytes.append(singleChar.data(using: encoding) ?? "?".data(using: .ascii)!) 
      } 
     } 
     return bytes 
    } 
    func removingPercentEncoding(using encoding: String.Encoding) -> String? { 
     return String(data: bytesByRemovingPercentEncoding(using: encoding), encoding: encoding) 
    } 
} 

let origStr = "%D7%CF%BD%FB%B3%C7%C4%A7%D6%E4_%CE%DE%CF%DE%D0%A1%CB%B5%CD%F8_www.55x.cn.rar" 
print(origStr.removingPercentEncoding(using: .gb_18030_2000)) //->Optional("紫禁城魔咒_无限小说网_www.55x.cn.rar") 
+0

réponse parfaite! Merci beaucoup ~ – burning