我有一个纯文本,用文本文档打开后工作正常,没有什么奇怪的。但是当我用MS Word打开它时,当我点击“显示段落”选项时,一些空格显示类似于Degrees符号的符号(一个小cirlce。如果你在MS Word文档中键入alt + 255,你可以看到它。)我想知道如何摆脱它。它出现是因为在某些地方传出的字符串我已经删除了但是我猜有后遗症。
我希望有人可以提供帮助。这真的很烦人。
答案 0 :(得分:3)
问题很可能是字符集之一。在我的测试中,alt-number在windows中不起作用,所以我在名为Scite的文本编辑器中进行了复制并粘贴到windows中。复制和粘贴时的字符alt-255创建了带有“show paragraph”选项的度数符号“但保存为字符A0。这是一个非破坏空间的windows-1252字符(似乎与预期的匹配)鉴于它们出现在你有非破坏空间的地方)。
默认情况下,C#使用unicode作为字符串编码,所以如果我将文件加载到c#中,它会假设它是unicode,除非我告诉它。在我的情况下,我的文件是61 A0 62 A0 63
,这是“a b c”(其中空格实际上是非破坏空格)。当c#加载时,这是正确读取a,b和c但是A0
不是有效的unicode字符(或者一个的开头),因此它将它作为unicode字符65533(REPLACEMENT CHARACTER)加载,这是什么在找到无法解释的字符时使用。
通过我的测试,如果我加载它并指定编码是代码页1252然后它正确加载不间断空格,然后我可以使用string.replace来替换它。
result = File.ReadAllText("testfile.txt", System.Text.Encoding.GetEncoding(1252));
result = result.Replace((char)160, ' ');
最重要的是确保在加载此文件时使用正确的编码,以便正确解释字符。假设您自己生成了文件,您应该知道它正在使用的编码。
最后一点需要注意的是,正如我在评论中提到的那样,你的问题听起来可能是你没有像你认为的那样剥离不间断的空格,因为它们似乎在你保存的文件中。虽然上面回答了如何在文件中删除它们的问题,但最好在源代码处理问题,而不是首先将它们放在文件中。也许打开另一个问题,详细说明如何创建文件,询问为什么它会省去不间断的空格。