Swift 4 Как удалить%EF%BB%BF из URL, созданного из URLComponent()?

Я пытаюсь создать URL из компонентов

var com =  URLComponents()
com.scheme = "http"
com.host = "192.168.1.99"
com.port = 77
com.path = "/api/dosomething/55"

print("SHOW ME URl =  \(com.url!))")

Что я получил, это что-то вроде этого

http://192.168.1.99:77/%EF%BB%BFapi/dosomething/55

Всегда есть %EF%BB%BF, в этом случае URL становится недействительным

я хочу удалить %EF%BB%BFс URL

Как я могу это сделать?

3 ответа

Решение

Это URL-кодировка спецификации UTF-8, это может быть вызвано обработкой URL-адресов некоторыми текстовыми редакторами. Удалите пробелы из строки пути:

var com =  URLComponents()
com.scheme = "http"
com.host = "192.168.1.99"
com.port = 77
let path = //The path
let trimmedPath = path.trimmingCharacters(in: .whitespaces)
com.path = trimmedPath

print("SHOW ME URl =  \(com.url!)")

В utf-8 'НУЛЕВОЙ ПРОСТРАНСТВО НУЛЬНОЙ ШИРИНЫ' кодируется как 0xEF 0xBB 0xBF

Прямой ответ на ваш вопрос

Вы можете заменить этот шаблон ничем:

let theURL = "http://192.168.1.99:77/%EF%BB%BFapi/dosomething/55"
let partToRemove = "%EF%BB%BF"
let clearURL = theURL.replacingOccurrences(of: partToRemove, with: "")
print(clearURL)

В дополнение к ответу Иелямани, как.whitespacesпохоже, не содержит символа спецификации, я предлагаю следующее:

      extension String
{
    var withoutBom: String
    {
        let bom = "\u{FEFF}"
        if self.starts(with: bom)
        {
            return String(dropFirst(bom.count))
        }
        return self
    }
}

а затем используя что-то вроде:

      path.withoutBom
Другие вопросы по тегам