Символ пробела NumberFormatter не является пробелом - из-за этого тесты не выполняются - PullRequest
0 голосов
/ 11 октября 2018

Я писал несколько тестов для некоторых функций справки для нашего кода обработки валюты, и в частности для форматирования различных форматов валюты для языковых стандартов, которые относятся к нам.

Это минимальный пример для репликации того же самогоповедение:

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, но это только мое предположение.Я пытался преобразовать строку в данные и обратно, используя разные кодировки для шага данных, но ничего не сделал.

...