https://kotlinlang.org logo
#multiplatform
Title
# multiplatform
r

Ran

02/02/2021, 8:46 AM
Copy code
stringByAddingPercentEncodingWithAllowedCharacters
doesn’t work on Kotlin Native. My code is like following:
Copy code
actual fun urlEncode(url: String) : String {
    val set = NSCharacterSet.URLQueryAllowedCharacterSet().mutableCopy() as NSMutableCharacterSet
    set.addCharactersInString("+&")
    return NSString.create(string=url).stringByAddingPercentEncodingWithAllowedCharacters(
        allowedCharacters = NSCharacterSet.URLQueryAllowedCharacterSet()
    ) ?: ""
}
My test code:
Copy code
@Test
fun testUrlEncode() {
    assertEquals(
        "https%3A%2F%2Fmontageapps.com%3Ftoken%3Drth%26price%3Dinvaluable",
        urlEncode("<https://montageapps.com?token=rth&price=invaluable>")
    )
}
Test result:
kotlin.AssertionError: Expected <https%3A%2F%<http://2Fmontageapps.com|2Fmontageapps.com>%3Ftoken%3Drth%26price%3Dinvaluable>, actual <<https://montageapps.com?token=rth&price=invaluable>>.
a

Artyom Degtyarev [JB]

02/02/2021, 9:59 AM
Hi, @Ran! To make the test work, I changed your function as follows:
Copy code
fun urlEncode(url: String) : String {
    val set = NSCharacterSet.letterCharacterSet().mutableCopy() as NSMutableCharacterSet
    set.addCharactersInString(".")
    return NSString.create(string=url).stringByAddingPercentEncodingWithAllowedCharacters(
        allowedCharacters = set
    ) ?: ""
}
r

Ran

02/02/2021, 10:00 AM
Thanks, maybe we should figure out that why
NSCharacterSet.URLQueryAllowedCharacterSet
doesn’t work
a

Artyom Degtyarev [JB]

02/02/2021, 10:18 AM
I would say this is because this set contains symbols you want to be encoded. Can’t find a way to print this set’s contents right now, unfortunately, but you might want to check it by yourself.
8 Views