C# Weird Encoding.Default.GetString 输出将相机照片转换为字符串

C# Weird Encoding.Default.GetString output converting camera photo to string

我有一个以字节数组形式调用的 image,名为 imageAsBytes,我正尝试使用 Encoding.Default.GetString(image) 将其转换为存储在 machine.photos 中的字符串。转换出错,我得到一些奇怪的输出。

System.Text.Encoding.Default.GetString(image); 返回这个

为什么转换不正确?这是我用来创建图片的代码

var file = await CrossMedia.Current.TakePhotoAsync(
            new StoreCameraMediaOptions
            {
                SaveToAlbum = true,
            });

 using (var memoryStream = new MemoryStream())
            {
                file.GetStream().CopyTo(memoryStream);
                //file.Dispose();
                imageAsBytes = memoryStream.ToArray();
                file.Dispose();
            }

根据您的评论,我认为您需要 Base 64 字符串编码。你可以用这个得到它:

string encoding = Convert.ToBase64String(image);

此格式可用于将二进制数据转换为可读和可打印的字符串。但是,当您使用 base 64 系统而不是 base 256 系统(字节!)时,它会占用更多空间。这将使您的数据大小增加大约 33%。

根据 MSDN:

The base-64 digits in ascending order from zero are the uppercase characters "A" to "Z", the lowercase characters "a" to "z", the numerals "0" to "9", and the symbols "+" and "/". The valueless character, "=", is used for trailing padding.

例如,iVBORw0KGgoA(样本的前 12 个字符)代表 9 个字节。如果您使用任何 Encoding 方法,这些字节将被转换为相应的编码,可以是每字节一个字符(ASCII 或 UTF8)、每 2 个字节(Unicode)甚至每 4 个字节(UTF32) .这意味着您的 2 或 4 个字节最终可能会成为一个中文符号,这显然不是您想要的。