char 160在我的源代码中意味着什么?

我格式化数字string使用以下格式string“##。##”,在某些时候,我需要把这些数字string(1 234 567)转回像1234567.我试图去掉空字符但是发现

value = value.Replace(" ", ""); 

由于某种原因,string保持1 234 567.看了string后,我发现

值[1]是160。

我想知道160是什么意思?

答案是查看Unicode代码图表 – 在哪里可以findLatin-1补充图表 ; 这表明,U + 00A0(160是根据你的头衔,而不是按照身体167)是一个不破的空间。

也许你可以使用正则expression式来replace那些空的字符:

 Regex.Replace(input, @"\p{Z}", ""); 

这将删除“任何types的空白或不可见的分隔符” 。

char代码160将是 

value.Replace(Convert.ToChar(160).ToString(),"")

这是使用Char.IsWhiteSpace删除任何分类为空白字符的快速(且相当可读)的方法:

 StringBuilder sb = new StringBuilder (value.Length); foreach (char c in value) { if (!char.IsWhiteSpace (c)) sb.Append (c); } string value= sb.ToString(); 

正如dbemerlin所指出的,如果你知道你只需要你的数据中的数字,那么你最好使用Char.IsNumber或者更具限制性的Char.IsDigit

 StringBuilder sb = new StringBuilder (value.Length); foreach (char c in value) { if (char.IsNumber(c)) sb.Append (c); } string value= sb.ToString(); 

如果你需要数字和小数分隔符,这样的事情应该足够了:

 StringBuilder sb = new StringBuilder (value.Length); foreach (char c in value) { if (char.IsNumber(c)|c == System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator ) sb.Append (c); } string value= sb.ToString(); 

我会build议使用char重载版本 :

 value = value.Replace(Convert.ToChar(160), ' ') 

解决scheme扩展方法:

 public static class ExtendedMethods { public static string NbspToSpaces(this string text) { return text.Replace(Convert.ToChar(160), ' '); } } 

它可以用于这个代码:

 value = value.NbspToSpaces(); 

用鲁本斯已经发布的正则expression式方法replace所有空字符(这是提问者想要做的)不是首选的方法吗?

 Regex.Replace(input, @"\p{Z}", ""); 

或者Expressobuild议:

 Regex.Replace(input, @"\p{Zs}", ""); 

这里的区别是\ p {Z}replace了任何一种空格或不可见的分隔符,而\ p {Zs}replace了一个不可见的空白字符,但占用了空间。 你可以在这里阅读(Section Unicode Categories):

http://www.regular-expressions.info/unicode.html

使用正则expression式的优点是,只需要一个命令来replace正常的空格,而不是像上面的一些答案中所解释的那样,不断的空格。

如果performance是顺其自然的方式,那么当然也应该考虑其他的方法,但是这里没有范围。