我有一個純文本,在用文本文檔打開後工作正常,沒有什麼奇怪的,但是當我用MS Word打開它時我點擊了「顯示段落」選項,其中一些空格顯示爲與Degrees符號相似的符號(稍微有些圓形,如果您在MS Word文檔中鍵入alt + 255,可以看到它)。我想知道擺脫它。它顯示出來,因爲在傳出字符串的某些地方我有$ nbsp的,我刪除了,但我想有後效應。如何替換純文本'alt-255'符號中的不可見
我希望有人可以幫忙,這真的很煩人。
我有一個純文本,在用文本文檔打開後工作正常,沒有什麼奇怪的,但是當我用MS Word打開它時我點擊了「顯示段落」選項,其中一些空格顯示爲與Degrees符號相似的符號(稍微有些圓形,如果您在MS Word文檔中鍵入alt + 255,可以看到它)。我想知道擺脫它。它顯示出來,因爲在傳出字符串的某些地方我有$ nbsp的,我刪除了,但我想有後效應。如何替換純文本'alt-255'符號中的不可見
我希望有人可以幫忙,這真的很煩人。
問題可能是字符集之一。在我的測試中,alt-number在windows中不起作用,所以我在一個名爲Scite的文本編輯器中完成了它,然後複製並粘貼到窗口中。複製和粘貼時的字符alt-255創建了帶有「顯示段落」選項的度符號,但保存爲字符A0,這是非破壞空間的windows-1252字符(它似乎與期望的因爲它們出現在你沒有破空間的地方)
C#默認使用unicode作爲字符串編碼,所以如果我要將我的文件加載到c#中,它會假定它是unicode,除非我另有說明。我的文件是61 A0 62 A0 63
這是「abc」(其中空格實際上是非空格)。當c#加載時,它正確讀取a,b和c,但A0
不是有效的Unicode字符(或一個開頭),因此結果它將它加載爲unicode字符65533(REPLACEMENT CHARACTER),這是它在找到一個不可解釋的字符時使用的字符。
隨着我的測試,如果我加載它,並指定編碼是代碼頁1252,那麼它正確加載nonbreaking空間,然後我可以使用string.replace來替換它。
result = File.ReadAllText("testfile.txt", System.Text.Encoding.GetEncoding(1252));
result = result.Replace((char)160, ' ');
底線是爲了確保您加載此文件時使用正確的編碼,以便它正確解釋字符。假設你自己生成了這個文件,你應該知道它使用的是什麼編碼。
最後一點需要注意的是,正如我在評論中提到的那樣,您的問題聽起來像是您不會像您認爲的那樣去除非破壞性空間,因爲它們似乎在您保存的文件中。雖然上面的答案是如何在文件中刪除它們的問題,但最好從源頭處理問題,而不要將它們放在文件中。也許還會提出另一個問題,詳細說明如何創建文件,詢問爲什麼要節省非破壞性空間。
有[很多空格字符](http://en.wikipedia.org/wiki/Space_%28punctuation%29#Spaces_in_Unicode),你必須縮小它。不要使用Word來診斷它,請使用C#。 StreamReader,string.ToCharArray()和調試器會顯示你。或一個十六進制查看器 –
當我做alt + 255我得到一個十六進制'A0'在我的文件這是一個不間斷的空格字符。你確定你已經正確地刪除了' '並且他們沒有被解析嗎? – Chris