好吧,当使用IO.File.ReadAllText(path)
或ReadAllText(path, System.Text.Encoding.UTF8)
读取以ANSI编码保存的文本文件时,非拉丁字符无法正确显示。
所以,我决定使用Encoding.Default
。它运行得很好,但我看到建议不要在任何地方使用它(例如here和here),因为它"只能保证所有UTF-7字符集都能正确读取& #34; 。也是微软
表示:
获取操作系统当前ANSI代码页的编码。
但是,在我看来,它可以识别任何编码的文件。我在a file that contains Chinese, Japanese, and Arabic characters - 上测试了该文件以utf8编码保存 - ,我能够正确显示文件。
使用的代码:
Dim loadedText As String = IO.File.ReadAllText(path, System.Text.Encoding.Default)
MessageBox.Show(loadedText, "utf8")
输出:
所以我的问题是:
Encoding.Default
?
我知道如果更改了默认的系统编码/系统区域设置,那么使用ANSI编码的文件将显示不正确,这在我目前的情况下是我不关心的。 但 .. 附注:请不要介意我使用c#
标记。虽然我的代码是在VB中,但欢迎任何使用C#代码的答案。
答案 0 :(得分:2)
File.ReadAllText实际上会尝试自动检测编码。如果无法从BOM确定编码,则使用encoding参数对文件进行解码。
此方法尝试根据字节顺序标记的存在自动检测文件的编码。可以检测到编码格式UTF-8和UTF-32(big-endian和little-endian)。
如果您使用Encoding.UTF8
来编写文件,那么它将包含BOM。您的Encoding.Default
可能会被忽略。
答案 1 :(得分:0)
建议不要使用{{1}},因为它是操作系统的ANSI代码页,仅限于给定代码页的字符集。换句话说,在捷克语Windows中的记事本(ANSI编码)中创建的文本文件将在英语Windows中显示不正确。因此,应该以UTF-8编码保存和打开所有内容。