gpt4 book ai didi

c# - 读取包含 unicode 字符的文件

转载 作者:可可西里 更新时间:2023-11-01 08:20:37 25 4
gpt4 key购买 nike

我有一个 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% 可靠的方法来执行此操作,因此它经常会出错)。您需要的确切编码取决于文件本身,但在我的例子中,使用的编码是 Extended ASCII ,所以要读取文件,我只需要指定正确的编码:

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

(参见 this question)。

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

content = content.Replace("\u0092", "'");

关于c# - 读取包含 unicode 字符的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5798110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com