来自 MSDN
这是Encoding.Default 属性:
不同的计算机可以使用不同的编码作为默认编码,甚至可以在单台计算机上更改默认编码。因此,从一台计算机流式传输到另一台计算机或什至在同一台计算机上的不同时间检索的数据可能会被错误地翻译。此外,默认属性返回的编码使用最佳匹配回退将不受支持的字符映射到代码页支持的字符。由于这两个原因,一般不建议使用默认编码。为确保正确解码编码字节,您应该使用带有前导码的 Unicode 编码,例如 UTF8Encoding 或 UnicodeEncoding。另一种选择是使用更高级别的协议来确保编码和解码使用相同的格式。
字符串由 Encoding.Default 传入,但随后使用 UTF8 解码所以瓶颈不是 Encoding.Default。它是 Encoding.UTF8 它正在获取字节并将其正确转换为字符串。
即使您尝试在控制台中打印它。看看这两种情况:
第二行,用 utf8 配置打印您可以通过添加以下行来配置您的控制台以支持 utf8:
Console.OutputEncoding = Encoding.UTF8;
即使使用您的代码:文件中的结果也将如下所示:

同时使用 Encoding.UTF8 将字符串转换为字节
var text = "M_M-150 150CC. เดี่ยว (2 For 18 Save 2";
var ascii = Encoding.UTF8.GetBytes(text);
text = Encoding.UTF8.GetString(ascii);
结果将是:

如果您查看支持的脚本,您会发现UTF8支持所有 Unicode 字符
包括泰语。
请注意,例如 Encoding.Default 将无法阅读中文或日文,
举个例子:
var text = "漢字";
var ascii = Encoding.Default.GetBytes(text);
text = Encoding.UTF8.GetString(ascii);
这是文本文件的输出:

在这里,如果您尝试将其写入文本,它将无法成功转换。
所以你必须使用 UTF8 读写它
var text = "漢字";
var ascii = Encoding.UTF8.GetBytes(text);
text = Encoding.UTF8.GetString(ascii);
你会得到这个:

所以正如我所说,整个过程取决于UTF8而不是默认编码。