日期:2014-05-18  浏览次数:20769 次

亲,这道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# 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