Encoding.ASCII
用于标准的 7 位 ASCII 编码,它根本不包含度数符号。为了获得 ASCII 中的度数符号,您必须使用许多 8 位 ASCII 编码之一。对于英语,您可能对使用 ISO 8859-1 代码页最感兴趣,因为这是其中最标准的代码页。例如Encoding.ASCII
,您可以执行以下操作,而不是 using :
Using OutFile As New StreamWriter(fName, False, Text.Encoding.GetEncoding("iso-8859-1"))
OutFile.Write(txt)
End Using
有关可用编码的完整列表,请使用该方法,或查看MSDN 文档Encoding.GetEncodings
中支持的列表。
当然,各种 8 位 ASCII 编码都不兼容,因此,如果您确实使用它,在默认使用不同代码页的系统上查看时,度数符号将是一个完全不同的符号。这正是 UTF-8 成为新标准的原因。普遍不鼓励使用 8 位 ASCII,因为它在多文化场景中实际上是行不通的。如果您可以改用 UTF-8,我会的。如果必须使用 ASCII,最好坚持使用标准的 7 位编码。如果您必须使用 8 位 ASCII 编码,请谨慎使用,并充分了解其缺点。
还有一件事。您在所需的目标编码中将度数符号称为字符 167 (0xA7)。如果是这种情况,您实际上可能需要 IBM437 编码而不是 ISO 8859-1。IBM437 是 MS-DOS 中默认使用的旧代码页。如果您确实需要使用该代码页,您可能会遇到额外的麻烦,原因有两个。正如您将在 MSDN 文章中看到的那样,该代码页在 .NET 框架中没有得到很好的支持。在我的测试中,使用该编码输出包含度数符号的 Unicode 字符串无法正常工作。因此,您可能会发现自己需要使用字节数组来表示数据而不是String
变量(即 Unicode)。例如:
File.WriteAllBytes("Test.txt", {167})
第二个问题是 IBM437 可能不是您的 Windows 操作系统的默认代码页,因此即使将其作为字节值 167 写入文件,当您在 Windows 应用程序中查看它时,它实际上也不会看起来像度数符号比如记事本。