NumberFormatter空格字符不是空格-测试因此失败

时间:2018-10-11 14:11:45

标签: swift formatting locale nsnumberformatter

我正在为货币处理代码的一些帮助功能编写测试,尤其是与我们相关的语言环境的不同货币格式的格式。

这是复制相同行为的最小示例:

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\"")
}

在这两个示例中,我们使用的是挪威语和瑞典语区域设置。我们得到的两个字符串都不符合预期的字符串,因为预期的字符串最初是在单元测试中编写的。这就是我们所期望的。

问题在于空白不是实际空间。当我检查格式化程序返回的字符串的十六进制值时,得到以下内容(来自hexed.it,LittleEndian):

"-250,00 kr" in hex (SEK):
\x{E28892}250,00\x{C2A0}kr

即使“-”在这里也弄乱了。 将此代码行添加到运动场可解决以下问题:formatter.negativePrefix = "-"

我无法弄清楚如何解决空白。此问题是由某些字符串编码设置引起的吗?考虑到上面的十六进制字符串,我认为它根本没有使用UTF8,但这只是我的猜测。我曾尝试将字符串转换为数据,然后再将其转换回去,对数据步骤使用不同的编码,但是它什么也没做。

0 个答案:

没有答案