【发布时间】:2013-06-20 17:54:25
【问题描述】:
如果我使用 FileIO.ReadTextAsync、ReadLinesAsync 或 DataReader 读取文本文件,我只能指定 UnicodeEncoding 枚举的成员进行编码。由于某种原因,这仅包括 Utf8、Utf16BE 和 Utf16LE。那么如何读取具有其他编码(如 Windows-1252 甚至常规 Unicode(所有字符 2 字节))的文本文件?
如果 Windows 应用商店应用程序与桌面应用程序共享文本文件或从 Internet 读取文本文件,这可能很重要。
【问题讨论】:
-
这不是出于“某种原因”,这是对使用错误编码读取文本文件的永无止境的损失的硬性停止。 Utf-16 是“常规 Unicode”,使用 2 个字节。您可以通过读取二进制数据并使用 Encoding 类转换文本来自己旋转它。
-
谢谢汉斯。我不知道 Encoding.Unicode 实际上是 UTF-16 LE(实际上使用 2 或 4 个字节)。我为“硬停”假设了相同的原因,但我想确定。这确实有道理。使用 BOM 读取 UTF-8 或 UTF-16 文件总是成功,即使我传递了错误的编码(当存在 BOM 时显然会被忽略)。好吧,在读取没有 BOM 的 UTF 编码文本文件时,我们仍然可能会遇到问题(我检查过)。但这样的文件将非常罕见。感谢 Encoding.GetString 的提示。我忘记了 :-) 会将其标记为答案。
标签: windows-runtime winrt-xaml windows-store-apps