亲,这道image->xml的题,该如何解决?
面试遇一题(要求C#实现将SQL SERVER中一image字段转换为xml文件),好生为难,故共享与此:
MS SQL SERVER 中一个表的一个Image字段值:
FieldName DataCurrent
FieldValue 0x1F8B0800000000000400EDBD07601C4996...(数据很大,略)
用一个普通xml文件先转换为Image字段值后,发现:
FieldName DataCurrent
FieldValue 0x3C3F786D6C2076657273696F6E3D22312E30...(数据很大,略)
该xml文件开头为:
<?xml version="1.0" encoding="utf-16"?><...>
采用各种不同的编码转换,如ASICC,UNICODE,UTF32,UTF8均未能转换成数据库中以0x1F8B...开头的数据值,诸位有何高见?
[解决办法]
你读出来时应该是byte[],你可以将其转为字符串,存入xml
Encoding.Default.GetString()
或
BitConverter.ToString
还有其他很多方法
[解决办法]
Convert.ToBase64String
[解决办法]
string xml = Encoding.ASCII.GetString(image);
别这样用,他不是字符串形式,不要用字符编码,这样
string xml = Convert.ToBase64String(image);
[解决办法]
转换函数
#region "字符串图片转换"/// <summary>/// 将Base64转成图片/// </summary>/// <param name="str">Base64字符串</param>/// <returns>图片</returns>/// <remarks></remarks>public static Image StrToImage(string str){ if (str.Length == 0) { return null; } byte[] bs = Convert.FromBase64String(str); System.IO.Stream stream = new System.IO.MemoryStream(bs); System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(stream); return bmp;}/// <summary>/// 将图片转成Base64字符串/// </summary>/// <param name="image">图片</param>/// <returns>Base64字符串</returns>/// <remarks></remarks>public static string ImageToStr(Image image){ if (image == null) { return ""; } byte[] resByte = null; dynamic MemoryStream = new System.IO.MemoryStream(); image.Save(MemoryStream, System.Drawing.Imaging.ImageFormat.Png); resByte = MemoryStream.GetBuffer(); //取内存流数据 return Convert.ToBase64String(resByte);}#endregion