Вы пытаетесь найти значения byte
, но строки C# сделаны из char
значений. Спецификация языка C# в разделе «2.4.4.4 Символьные литералы»:
Литеральный символ представляет собой один символ и обычно состоит из символа в кавычках, как в 'a'.
...
Шестнадцатеричная escape-последовательность представляет одиночный символ Unicode со значением, образованным шестнадцатеричным числом, следующим за \x
.
Поэтому поиск "\xF0..."
ищет характер U+F0
, который будет представлен в байтах C3 B0
.
Если вы хотите найти замену всех символов Юникода, первый байт которого равен 0xF0, тогда я считаю, что вам нужно искать значения символов, первый байт которых равен 0xFO.
Персонаж U+10000
представлен как F0 90 80 80
(предыдущий код U+FFFF
который является EF BF BF
). Первый код с F1 .... ..
равен U+40000
, который равен F1 80 80 80
, а значение составляет U+3FFFF
, которое составляет F0 BF BF BF
.
Следовательно, вам необходимо удалить символы в диапазоне U+10000
до U+3FFFF
. Это должно быть возможным с помощью регулярного выражения, таких как
sText = Regex.Replace (sText, "[\\x10000-\\x3FFFF]", "");
Релевантных персонажей из источника цитируемого в этом вопросе был извлечены в коду ниже. Затем код пытается понять, как символы хранятся в строках.
static void Main(string[] args)
{
string input = "] (";
Console.Write("Input length {0} : '{1}' : ", input.Length, input);
foreach (char cc in input)
{
Console.Write(" {0,2:X02}", (int)cc);
}
Console.WriteLine();
}
Выходные данные программы приведены ниже. Это поддерживает суррогатную пару объяснение @Jeppe в его ответе.
Input length 6 : '] ?? (' : 5D 20 D834 DD1E 20 28
Используйте две обратной косой черты. – jdweng
Возможно, потому, что вы попытались удалить символ '' ð' '(https://ideone.com/YizDeh). Каков ваш точный ввод и точный ожидаемый результат? –
Комментарии для _us_, чтобы спросить _you_ для уточнения. Поставьте свои разъяснения в самом вопросе, нажав ссылку [edit] (https://stackoverflow.com/posts/38714663/edit) и обновив сообщение. –