读取带有unicode字符的文件

2024-02-25

我有一个 asp.net c# 页面,并尝试读取具有以下字符 ' 的文件并将其转换为 '. (从倾斜撇号到撇号)。

FileInfo fileinfo = new FileInfo(FileLocation);
string content = File.ReadAllText(fileinfo.FullName);

//strip out bad characters
content = content.Replace("’", "'");

这不起作用,它会将倾斜的撇号更改为?分数。


我怀疑问题不在于替换,而在于文件本身的读取。当我以 nieve 方式(使用 Word 和复制粘贴)尝试此操作时,我最终得到了与您相同的结果,但是检查content显示.Net框架认为该字符是Unicode字符65533,即“WTF?”特点before字符串替换。您可以通过检查相关内容自行检查特点在 Visual Studio 调试器中,应显示字符代码:

content[0]; // 65533 '�'

替换不起作用的原因很简单 -content不包含您提供的字符串:

content.IndexOf("’"); // -1

至于为什么文件读取无法正常工作 - 您在读取文件时可能使用了错误的编码。 (如果未指定编码,则 .Net 框架将尝试为您确定正确的编码,但是没有 100% 可靠的方法来执行此操作,因此经常会出错)。您需要的确切编码取决于文件本身,但是就我而言,使用的编码是扩展 ASCII http://en.wikipedia.org/wiki/Extended_ASCII,因此要读取文件,我只需要指定正确的编码:

string content = File.ReadAllText(fileinfo.FullName, Encoding.GetEncoding("iso-8859-1"));

(See 这个问题 https://stackoverflow.com/questions/666385/how-can-i-convert-extended-ascii-to-a-system-string).

您还需要确保在替换字符串中指定正确的字符 - 在代码中使用“奇数”字符时,您可能会发现通过字符代码指定字符更可靠,而不是作为字符串文字(这可能会导致如果源文件的编码发生变化,就会出现问题),例如以下内容对我有用:

content = content.Replace("\u0092", "'");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取带有unicode字符的文件 的相关文章

随机推荐