繁体   English   中英

以所选编码将文本文件读入字节数组的最佳方法?

[英]Best way to read text file into byte array in selected encoding?

现在我使用类似的东西:

Encoding.UTF8.GetBytes(File.ReadAllText(filename))

任何建议如何更好地做到这一点?

什么编码使用File.ReadAllBytes(filename)方法?

PS我需要utf-8字节数组来在db中存储文本文件

以所选编码将文件读入字节数组的最佳方法?

字符编码是以二进制形式存储文本,作为每个字符的特定字节序列。 另一种思考方式是编码系统赋予某些字节以意义 如果没有某些字节表示文本的上下文,则字节只是字节。

文件也只是字节; 并且可以根据您希望应用程序解释它们的方式来解释它们。

当您解码字节时,您会根据所使用的编码系统赋予这些字节以意义。 对于文本编码,以字节开始,以字符结束。
您不能将文件中的字节“解码”为字节数组。 这不会赋予字节任何意义或产生任何字符。

可以使用特定编码将字节解码为字符串:

string allLinesFromFileAsAuto = File.ReadAllText(filename);
string allLinesFromFileAsUTF8 = File.ReadAllText(filename, Encoding.UTF8);
string allLinesFromFileAsASCII = File.ReadAllText(filename, Encoding.ASCII);

所有这三种方法都将来自同一文件的字节转换为字符串,但根据您使用的编码,生成的字符串会有所不同。

什么编码使用File.ReadAllBytes(filename)方法?

File.ReadAllBytes(filename)不使用任何编码。 文件只是字节。 此方法将文件的所有字节拉入字节数组。 获得该字节数组后,您仍然必须将这些字节解码为字符串。 但这仅适用于纯文本文件。

我需要 utf-8 字节数组来在 db 中存储文件

这是因为您的数据库使用 UTF-8 编码吗?
数据库的编码定义了文本的存储方式(作为二进制)。 在大多数数据库中,无论编码如何,二进制数据都可以按原样、逐字节存储为“blob”。

ReadAllText将尝试推断文件的编码并将其转换为 .NET 字符串。 无论源编码是什么,您的第一个示例都会将它们转换为 UTF-8 字节。

根据文件的大小,将其全部加载到内存两次可能代价高昂。 你可以做一些事情来读取源文件的块并以这种方式转换它。

ReadAllBytes将原始文件读取为一系列字节,没有编码/解码。

如果您在数据库中存储非文本文件,则不应将文件编码为 UTF-8。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM