【问题标题】:FileInfo.OpenText() Fails To Read Special Characters E.G. üò°FileInfo.OpenText() 无法读取特殊字符 E.G. üò°
【发布时间】:2012-06-05 18:50:52
【问题描述】:

有一些文本文件在 TextBox 和 TextBlock 中显示许多字符。

如何在 .NET WPF 中正确读取和显示这些文件?

文件读取,其中 fi 是 FileInfo。

fileText = fi.OpenText().ReadToEnd();

在 WPF 中,我得到了 ü ò ° 和其他特殊字符的 � 字符。

尝试了多种字体。

Culture is en-EN。

如果我将文件作为流读取,我会得到特殊字符

System.IO.Stream fsIn = fi.OpenRead();
if (fsIn.Length == 0) return;
int curInt = -1;
StringBuilder sb = new StringBuilder();
while ((curInt = fsIn.ReadByte()) >= 0)
{
    sb.Append((char)curInt);
} 

OpenText() 似乎将所有特殊字符读取为字节 253

我想我学到的是文本不是 UTF8 编码的。 UTF8 使用 128-255 进行控制。 OpenText() 用于 UTF8 编码。 WikiUFT8

【问题讨论】:

    标签: .net wpf utf-8 fileinfo opentext


    【解决方案1】:

    fi.OpenText 使用 UTF8 编码打开 StreamReader。如果您需要不同的编码,请改用:

    using (var reader = new StreamReader(fi.FullName, Encoding.Unicode))
        fileText = reader.ReadToEnd();
    

    当然,您实际上根本不需要FileInfo 对象,因为上述调用只使用了路径。

    【讨论】:

      【解决方案2】:

      您基本上已经回答了自己的问题。您的文本文件不是 Unicode 格式 - 在某些特定代码页中可能是 ANSI。要读取此类文件,您可以使用传入编码的 StreamReader。有一些示例here

      【讨论】:

      • 谢谢。我从未知但不受控制的来源加载文件。我该怎么办?
      • fi.OpenText 使用 UTF8 编码打开一个 StreamReader。如果您需要不同的编码,请使用:new StreamReader(fi.FullName, Encoding.ASCII).ReadToEnd()。将Encoding.ASCII 替换为正确的编码。
      • @SimonMcKenzie 谢谢,如果你发布了我会接受的答案。
      • @Blam - 我已经把它写成下面的答案了!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多