Как декодировать закодированную строку windowsCP1252 Swift - PullRequest
0 голосов
/ 28 октября 2019

Из веб-службы мое приложение получает ответ JSON. В котором одно поле является строкой в ​​кодировке windowsCP1252.

Я пытаюсь декодировать его следующим кодом:

let input =  "സൗപർണിക"//a string from server response
let data = input.data(using: .windowsCP1252, allowLossyConversion: true)!
print("data \(data.description)")

let output = String(data: data, encoding: .utf8)

print("output \(output ?? "failed")")

Но преобразование не выполняется. печать не удалась.

Тот же ответ сервера преобразуется в Android с использованием следующего кода котлина.

val input = "സൗപർണിക"
val op = String(input.toByteArray(charset("Cp1252")), charset("UTF-8"))
println("converted string -----  " + op )

Этот код котлина правильно декодирует строку и печатает converted string ----- സൗപർണിക

Что не так с быстрой реализацией? Как заставить это работать?

1 Ответ

2 голосов
/ 28 октября 2019

Проблема в том, что 1251 не совпадает с 1252.

let s = "സൗപർണിക"
let d = s.data(using: .windowsCP1252)
let s2 = String(data: d!, encoding: .utf8) // "സൗപർണിക"
...