如何将文件转换为base64 UTF-8小端

时间:2014-12-10 10:39:20

标签: c# base64 endianness

美好的一天!

我将二进制文件转换为char数组:

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吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

这里没有任何UTF-8 - 无论如何UTF-8都没有字节序,因为它的代码单元大小只是一个字节。

您的代码将更简单:

var bytes = File.ReadAllBytes(@"file.wav");
string base64 = Convert.ToBase64String(bytes);

如果你把字符串写入一个文件,那么 就会有一个编码,这个编码很容易就是UTF-8(默认情况下会是这样),但是再次没有可用的字节序。

请注意,由于base64文本始终为ASCII,因此base64字符串中的每个字符都将占用UTF-8中的单个字节。即使UTF-8 对多字节值有不同的表示,这也不是问题。

答案 1 :(得分:2)

  • 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是面向字节的编码,因此字节顺序不是问题。