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 个字节最终可能会成为一个中文符号,这显然不是您想要的。
我有一个以字节数组形式调用的 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 个字节最终可能会成为一个中文符号,这显然不是您想要的。