2009-12-16 58 views

回答

7

簡答題(猜測了一下):

text = text.Replace("\xFFFD", "?"); 

,瞭解Unicodecharacter encodings ,尤其是utf-8.

長答案:

那麼,你的意思是「\ xEF \ xBF \ xBD」的字面意思嗎?也就是說,由這些字符的字符串:

backslash, uppercase latin character E, uppercase latin character F, backslash, uppercase latin character B, uppercase latin character F, backslash, uppercase latin character B, uppercase latin character D 

然後,答案應該是:

text = text.Replace(@"\xEF\xBF\xBD", "?"); 

還是你這是用C#轉義序列「中描述\ XEF \ XBF字符序列\ XBD 「即:

LATIN SMALL LETTER I WITH DIAERESIS, INVERTED QUESTION MARK, VULGAR FRACTION ONE HALF 

(這將顯示爲」?�)然後,你的代碼是正確的:

text = text.Replace("\xEF\xBF\xBD", "?"); 

還是你想更換字節序列

EF BF BD 

(這實際上可能是Unicode替換字符,FFFD,這往往顯示爲「」的UTF-8表示)?

這只是一個瘋狂的猜測,但是憑直覺說你實際上想要達到後者。現在,.Net字符串包含字符,而不是字節,但假設您已經讀取了這些字節,例如從一個文件爲utf-8,答案將是:

text = text.Replace("\xFFFD", "?"); 
+0

我在談論字節序列,而不僅僅是簡單的字符值,你的答案運作良好。但是,請你詳細說明爲什麼我不能通過給出字節值來替換字節序列,就像我在問題中所做的一樣,爲什麼我必須寫\ xFFFD – 2009-12-17 03:58:33

+0

以及維基百科對我的評論的答案:http:// en.wikipedia。組織/維基/ Unicode_Specials – 2009-12-17 04:27:38

14

你必須逃避反斜槓。

text = text.Replace("\\xEF\\xBF\\xBD", "?"); 

或者,您可以逃避以@符號整個字符串:

text = text.Replace(@"\xEF\xBF\xBD", "?"); 
+0

合併兩個答案。根據需要給大衛代表。 – 2009-12-16 20:17:19

+0

謝謝克里斯!我甚至不知道你可以結合答案。很酷。 – David 2009-12-16 20:23:06

+0

不得不編輯您的文章並刪除我的。 – 2009-12-16 20:40:20