如何让 StreamReader 将 0xDF 读取为 "es zet"?

How to have StreamReader read 0xDF as an "es zet"?

如何让 StreamReader 读取 0xDF 作为 "es zet"? --- 或者让 MS Word 将 "es zet" 保存为 0xC3 0x178?

当德文字母 "es zet" 从 MS Access 复制并粘贴到记事本时,"es zet" 被保存为 0xC3 0x178。

当从 MS Word 中复制德文字母 "es zet" 并粘贴到记事本中时,"es zet" 也被保存为 0xC3 0x178。

当 MS Word 另存为 txt 时,"es zet" 更改为 0xDF。

记事本将 0xC3 0x178 解释为 "es zet"。记事本还将 0xDF 解释为 "es zet".

StreamReader(stFileName) 将 0xC3 0x178 读取为 "es zet" --- 将 0xDF 读取为未知。

(C#、WPF、Visual Studio 2019、MS Office 2019)

当您使用 MS Word 将文档另存为 txt 文件时,您会看到此对话框:

可以看到选择了"Windows (Default)"编码。这将根据您的计算机而改变,但对我(在西欧)来说,那是 Code Page 850。查看它,您可以看到 ß 的值为 0xDF。

在 .NET Framework(而非 .NET Core)上,当前机器的系统代码页可通过 Encoding.Default 访问。所以你可以使用 new StreamReader(stFileName, Encoding.Default).

但是,不同的机器会使用不同的代码页,这会把事情搞砸。我强烈建议告诉 MS Word 将文件另存为 "Unicode (UTF-8)":

您将能够使用 new StreamReader(stFileName) 阅读此文本文件,因为 StreamReader 默认为 UTF-8 编码。