2017-08-22 44 views
4

我正在處理.Net核心中的字符串。我有一個使用:n格式化的字符串,並且在格式化時輸出爲123 456,00。我想斷言格式化的字符串等於我希望的字符串,但我得到一個Assert.Equal Failure(),問題在於空格字符。在輸出中它斷言這兩個空間是不同的。如何在常規字符串上打印.NET String.Format空格字符?

這裏是我的代碼:

public void Separator() 
{ 
    var str = string.Format("{0:n}", 123456); 
    Assert.Equal("123 456,00",str); 
} 

我也比較了格式化字符串與斷言一個普通空格字符空格字符如下Assert.Equal(' ',str[3]);我得到的預期值是0x00a

爲什麼會發生這種情況,如何在不使用string.Format()的情況下獲得相同的字符?

+0

你想說,'Assert.Equal()''說123 456,00'不等於'123 456,00'?然後你需要在十六進制編輯器中檢查確切的值。或者只是使用一些在線工具來查看是否沒有錯字。嘗試http://r12a.github.io/apps/conversion/ –

+0

是的,我在(pos 3)中得到了區別,這意味着兩個空間不相等。 – Bayrem

+0

你確定這些空間是相同的嗎?請訪問http://r12a.github.io/apps/conversion/ –

回答

4

您使用的文化指定數字組分隔符是不同於空格的ASCII字符。我猜你在這裏使用的是ru-RU,這意味着這個數字是ASCII字符160,這意味着如果你輸入了一個空格,這些字符串將不匹配。

你可以替換與文化的隔膜的空間像這樣的例子:

var currentCulture = System.Threading.Thread.CurrentThread.CurrentCulture; 
var stringToCompare = "123 456,00".Replace(
    " ", 
    currentCulture.NumberFormat.NumberGroupSeparator); 

Assert.Equal(stringToCompare, str); 
+0

有趣的是,數字中的NO-BREAK空間比正常空間更合適。 Nit pick:.NET中的字符是Unicode,而不是ASCII。 NO-BREAK SPACE有一個UTF-16代碼單元,值爲'\ u00a0'(160)。 –