我怀疑问题不在于替换,而在于读取文件本身。当我尝试这种方式(使用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