Подтвердить что ты не робот

Что означает char 160 в моем исходном коде?

Я форматирования чисел в строку, используя следующую строку формата "# #. ##", в какой-то момент мне нужно вернуть эти числовые строки, например (1 234 567), примерно в 1234567. Я пытаюсь пустые символы, но обнаружили, что

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

по какой-то причине, и строка остается 1 234 567. После просмотра строки я обнаружил, что

Значение

[1] равно 160.

Мне было интересно, что означает значение 160?

4b9b3361

Ответ 1

Ответ: Unicode Code Charts - где вы найдете Таблица дополнений Latin-1; это показывает, что U + 00A0 (160 в соответствии с вашим названием, а не 167 в соответствии с телом) является неразрывным пространством.

Ответ 3

char code 160 будет  

Ответ 4

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

Ответ 5

Это быстрый (и достаточно читаемый) способ удаления любых символов, классифицированных как пробел, с помощью 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();

Ответ 7

Решение с расширенными методами:

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

И он может использоваться с этим кодом:

value = value.NbspToSpaces();

Ответ 8

Не был бы предпочтительным методом для замены всех пустых символов (и это то, что хотел задать вопросник) с помощью метода Regex, который уже опубликовал Rubens?

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

или то, что предлагает Expresso:

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

Различие заключается в том, что \p {Z} заменяет любой вид пробела или невидимого разделителя, тогда как \p {Zs} заменяет пробельный символ, невидимый, но занимает пробел. Вы можете прочитать его здесь (раздел Unicode Categories):

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

Использование RegEx имеет то преимущество, что требуется только одна команда, чтобы заменить также обычные пробелы, а не только неразрывное пространство, как описано в некоторых ответах выше.

Если производительность - это путь, то, конечно, следует учитывать другие методы, но здесь это не доступно.