Swift字符串省略/转换波兰口音

Swift字符串省略/转换波兰口音,swift,url,Swift,Url,我有以下问题: 我正在请求API。带有城市名称f.e.“Poznań”(包含某些语言的典型标志),swift不想给我结果,但当我通过Postman应用程序执行相同的请求时,它会以正确的方式给出结果。如何防止swift转换这些“奇怪”字母?“city.name”是我从以前的VC和googlePlaces API传递的城市名称。以下是请求示例和我的部分代码: 为了简洁起见,我在这里强制展开: let kWeatherAPIURL = "https://api.openweathermap.org/

我有以下问题: 我正在请求API。带有城市名称f.e.“Poznań”(包含某些语言的典型标志),swift不想给我结果,但当我通过Postman应用程序执行相同的请求时,它会以正确的方式给出结果。如何防止swift转换这些“奇怪”字母?“city.name”是我从以前的VC和googlePlaces API传递的城市名称。以下是请求示例和我的部分代码:


为了简洁起见,我在这里强制展开:

let kWeatherAPIURL = "https://api.openweathermap.org/data/2.5/weather?q=%@&appid=%@"
let weatherAPIKey = "YourWeatherAPIKey"
let cityName = "Poznań"


let cString = cityName.cString(using: .utf8)!
let utf8CityName = cityName.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!

let urlString = String(format: kWeatherAPIURL, utf8CityName, weatherAPIKey)
let url = URL(string: urlString)!

//https://api.openweathermap.org/data/2.5/weather?q=Pozna%C5%84&appid=YourWeatherAPIKey
一种安全的方法是使用:


为了简洁起见,我在这里强制展开:

let kWeatherAPIURL = "https://api.openweathermap.org/data/2.5/weather?q=%@&appid=%@"
let weatherAPIKey = "YourWeatherAPIKey"
let cityName = "Poznań"


let cString = cityName.cString(using: .utf8)!
let utf8CityName = cityName.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!

let urlString = String(format: kWeatherAPIURL, utf8CityName, weatherAPIKey)
let url = URL(string: urlString)!

//https://api.openweathermap.org/data/2.5/weather?q=Pozna%C5%84&appid=YourWeatherAPIKey
一种安全的方法是使用:


使用
URLComponents
的示例

准备如下函数:

func createWeatherAPIURL(cityName: String, apiKey: String) -> URL? {
    let kWeatherAPIURL = "https://api.openweathermap.org/data/2.5/weather"

    var urlCompo = URLComponents(string: kWeatherAPIURL)
    urlCompo?.queryItems = [
        URLQueryItem(name: "q", value: cityName),
        URLQueryItem(name: "appid", value: apiKey)
    ]
    return urlCompo?.url
}
并使用它:

    guard let url = createWeatherAPIURL(cityName: city.name, apiKey: weatherAPIKey) else {
        print("address doesnt exist!")
        return
    }

使用
URLComponents
的示例

准备如下函数:

func createWeatherAPIURL(cityName: String, apiKey: String) -> URL? {
    let kWeatherAPIURL = "https://api.openweathermap.org/data/2.5/weather"

    var urlCompo = URLComponents(string: kWeatherAPIURL)
    urlCompo?.queryItems = [
        URLQueryItem(name: "q", value: cityName),
        URLQueryItem(name: "appid", value: apiKey)
    ]
    return urlCompo?.url
}
并使用它:

    guard let url = createWeatherAPIURL(cityName: city.name, apiKey: weatherAPIKey) else {
        print("address doesnt exist!")
        return
    }

到目前为止您尝试了什么代码?这是我的url地址:let urlString=String(格式:kWeatherAPIURL,city.name,weatherAPIKey)guard let url=url(String:urlString)else{print(“地址不存在!”)return}我只想让斯威夫特阅读波兰语、法语符号等,以便我提出一个适当的API请求。华沙、伦敦工作得很好,但带有不寻常字母的城市名称不应在您的问题中包含该代码片段,所有相关代码请包含一个示例输入
urlString
,以显示请求的哪一部分带有重音城市名称isI强烈建议您使用
URLComponents
而不是
String(格式:)
。在大多数情况下,它可以处理转义(在本例中您需要转义)。到目前为止,您尝试了哪些代码?这是我的URLAddress:let urlString=String(格式:kWeatherAPIURL,city.name,weatherapike)guard let url=url(string:urlString)else{print(“地址不存在!”)return}我只想让斯威夫特阅读波兰语、法语符号等,以便我提出一个适当的API请求。华沙、伦敦工作得很好,但带有不寻常字母的城市名称不应在您的问题中包含该代码片段,所有相关代码请包含一个示例输入
urlString
,以显示请求的哪一部分带有重音城市名称isI强烈建议您使用
URLComponents
而不是
String(格式:)
。它将处理转义(在本例中需要转义)在大多数情况下。这是完美的!非常感谢!很高兴提供帮助,如果此答案解决了您的问题,请单击答案旁边的复选标记将其标记为已接受。请参阅:有关更多信息,这是完美的!非常感谢!很高兴提供帮助,如果此答案解决了您的问题,请单击复选标记将其标记为已接受请参阅:了解更多信息