Я писал несколько тестов для некоторых функций справки для нашего кода обработки валюты, и в частности для форматирования различных форматов валюты для языковых стандартов, которые относятся к нам.
Это минимальный пример для репликации того же самогоповедение:
let positiveCurrencyValue = Decimal(string: "250.00")!
let negativeCurrencyValue = Decimal(string: "-250.00")!
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "nb_NO")
formatter.numberStyle = .currency
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
let positiveString = formatter.string(from: positiveCurrencyValue as NSNumber)!
if positiveString == "kr 250,00" {
print("Positives are equal")
} else {
print("Positives are NOT equal! \"\(positiveString)\" != \"kr 250,00\"")
}
formatter.locale = Locale(identifier: "sv_SE")
let negativeString = formatter.string(from: negativeCurrencyValue as NSNumber)!
if negativeString == "-250,00 kr" {
print("Negatives are equal!")
} else {
print("Negatives are NOT equal! \"\(negativeString)\" != \"kr -250,00\"")
}
В этих двух примерах мы используем норвежский и шведский язык.Ни одна из строк, которые мы получаем, не соответствует ожидаемой строке, так как ожидаемая строка была изначально написана в модульном тесте.Так что это то, что мы ожидаем.
Проблема в том, что пробел не является реальным пространством.Когда я проверяю HEX-значения строки, возвращаемой форматтером, я получаю следующее (из hexed.it , LittleEndian):
"-250,00 kr" in hex (SEK):
\x{E28892}250,00\x{C2A0}kr
Даже "-" испорченВот.Добавление этой строки кода на игровую площадку исправляет следующее: formatter.negativePrefix = "-"
.
Хотя я не могу понять, как исправить пробелы.Эта проблема вызвана некоторыми настройками кодирования строки?Учитывая приведенную выше строку HEX, я предполагаю, что он вообще не использует UTF8, но это только мое предположение.Я пытался преобразовать строку в данные и обратно, используя разные кодировки для шага данных, но ничего не сделал.