您正在嘗試搜索byte
值,但C#字符串是從char
值中創建的。在「2.4.4.4字符文字」部分的C#語言規範指出:
字符文字代表單個字符,通常由引號中的字符組成,如'a'中。
...
十六進制轉義序列表示單個Unicode字符,其值由\x
後面的十六進制數字組成。
因此,對於"\xF0..."
搜索正在搜索其將由字節C3 B0
被表示的字符U+F0
。
如果你想找到替換所有的Unicode字符的第一個字節是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_要求_你的澄清。請通過點擊[編輯](https://stackoverflow.com/posts/38714663/edit)鏈接並更新您的帖子,將您的澄清置於問題本身中。 –