我懷疑問題不在於替換,而在於讀取文件本身。當我嘗試這種方式(使用Word和複製粘貼)時,我得到了和你一樣的結果,但是檢查content
表明.Net框架認爲該字符是Unicode字符65533
,即「WTF?」。字符之前字符串替換。您可以通過在Visual Studio調試器,它應該顯示的字符代碼檢查相關字符檢查這個自己:
content[0]; // 65533 '�'
之所以更換不工作很簡單 - content
不含字符串你給它:
content.IndexOf("’"); // -1
至於爲什麼文件讀取工作不正常 - 讀取文件時,你可能使用了錯誤的編碼。 (如果沒有指定編碼,那麼.Net框架會嘗試爲你確定正確的編碼,但是沒有100%可靠的方法來做到這一點,所以經常會出錯)。你需要精確編碼依賴於文件本身,但在我的情況下,編碼使用是Extended ASCII,所以讀我只需要指定正確的編碼文件:
string content = File.ReadAllText(fileinfo.FullName, Encoding.GetEncoding("iso-8859-1"));
(見this question)。
您還需要確保在替換字符串中指定了正確的字符 - 在代碼中使用「奇數」字符時,可能會發現通過其字符代碼指定字符更可靠,而不是字符串文字(這可能會導致問題,如果源文件的變化的編碼),例如下列爲我工作:
content = content.Replace("\u0092", "'");
有什麼問題? – BrokenGlass 2011-04-27 00:49:01
你說它把傾斜的那個改成了「?」。這意味着您的替換函數的第一個參數是正確的,但第二個參數是錯誤的。它可能是一個Unicode字符,*看起來像單引號,但實際上不是單引號。在沒有Unicode字體的顯示中,或者在打印到屏幕時,無法識別的Unicode字符顯示爲「?」。 – 2011-04-27 02:08:25
檢查第二個參數是否是正確的字符。您可能無意中打開了一個亞洲IME或其他東西,然後鍵入一個亞洲引號字符(即Unicode),該字符在屏幕上看起來就像一個簡單的引號。有時很難區分差異。 – 2011-04-27 02:09:33