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

时间:2010-01-25 12:57:03

标签: c# .net

我使用以下格式字符串“##。##”将数字格式化为字符串,在某些时候我需要将这些数字字符串(如(1 234 567))转回1234567之类的字符串。我试图去除空的角色却找到了

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

由于某种原因,字符串保持1 234 567.看完字符串后我发现

值[1]为160.

我想知道160的含义是什么?

8 个答案:

答案 0 :(得分:49)

答案是查看Unicode Code Charts - 您会在哪里找到Latin-1 supplement chart;这表明U + 00A0(根据你的头衔160,而不是身体的167)是一个不间断的空间。

答案 1 :(得分:24)

也许你可以使用正则表达式替换那些空字符:

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

这将删除"any kind of whitespace or invisible separator"

答案 2 :(得分:18)

字符代码160将为 

答案 3 :(得分:12)

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

答案 4 :(得分:2)

这是一种使用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();

答案 5 :(得分:2)

我建议使用char overload version

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

答案 6 :(得分:0)

使用扩展方法的解决方案:

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

它可以与此代码一起使用:

value = value.NbspToSpaces();

答案 7 :(得分:0)

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

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

或Expresso建议:

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

这里的区别在于\ p {Z}替换了任何类型的空格或不可见的分隔符,而\ p {Zs}替换了一个不可见的空格字符,但确实占用空间。 你可以在这里阅读(部分Unicode类别):

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

使用RegEx的优点是,只需要一个命令来替换正常的空格,而不仅仅是非破坏空间,如上面的一些答案中所解释的那样。

如果表现是可行的,那么当然应该考虑其他方法,但这不在此范围内。