亲,这道image->xml的题,该怎么解决
亲,这道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);
------解决方案--------------------
转换函数
面试遇一题(要求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);
------解决方案--------------------
转换函数
- C# code
#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