如何将文件转换为 base64 UTF-8 小字节序
本文关键字:UTF-8 字节 base64 文件 转换 | 更新日期: 2023-09-27 18:33:52
美好的一天!
我将二进制文件转换为字符数组:
var bytes = File.ReadAllBytes(@"file.wav");
char[] outArr = new char[(int)(Math.Ceiling((double)bytes.Length / 3) * 4)];
var result = Convert.ToBase64CharArray(bytes, 0, bytes.Length, outArr, 0, Base64FormattingOptions.None);
string resStr = new string(outArr);
那么,是小端序吗?它会转换为 UTF-8 吗?
谢谢!
这里没有任何 UTF-8 - 无论如何 UTF-8 都没有字节序,因为它的代码单元大小只是一个字节。
您的代码将更简单,如下所示:
var bytes = File.ReadAllBytes(@"file.wav");
string base64 = Convert.ToBase64String(bytes);
如果随后将字符串写入文件,则会有一个编码,该编码很容易是 UTF-8(默认情况下是),但同样无需担心字节序。
请注意,由于 base64文本始终采用 ASCII,因此 base64 字符串中的每个字符无论如何都会占用 UTF-8 中的单个字节。即使 UTF-8 确实对多字节值有不同的表示形式,这里也不会有问题。
- C#
char
表示 UTF-16 字符元素。所以这里没有 UTF-8。 - 由于 .net 是小端序,并且由于
char
是两个字节宽,因此char
数组和字符串都以小端字节顺序存储。
如果要将字节数组转换为base64,然后编码为UTF-8,请执行以下操作:
byte[] base64utf8 = Encoding.UTF8.GetBytes(Convert.ToBase64String(bytes));
如果您希望将 base64 文本保存到编码为 UTF-8 的文件中,您可以这样做:
File.WriteAllText(filename, Convert.ToBase64String(bytes), Encoding.UTF8);
由于 UTF-8 是面向字节的编码,因此字节序不是问题。