面试遇一题(要求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...开头的数据值,诸位有何高见?

解决方案 »

  1.   

    数据库读出来的 byte 数组,调用 Convert.ToBase64String 转成字符串再存进 xml 里去,xml 编码用 UTF8 好了
      

  2.   

    你读出来时应该是byte[],你可以将其转为字符串,存入xmlEncoding.Default.GetString()

    BitConverter.ToString
    还有其他很多方法
      

  3.   

    兄弟我正是这么做的(下面是部分代码),转换了不同的编码格式,读出来是乱码:byte[] image = (byte[])reader["DataCurrent"];
    XmlDocument  doc = new XmlDocument();
    string xml = Encoding.ASCII.GetString(image);  //该处试过不同的编码格式
    File.WriteAllText(@"D:\test.xml", xml);我个人都怀疑,这数据库中的数据是否有问题:0x1F8B08...,因为正常的转换xml到数据库的image字段中,一般值都是0x3C3F...
      

  4.   

    string xml = Encoding.ASCII.GetString(image); 
    别这样用,他不是字符串形式,不要用字符编码,这样
    string xml = Convert.ToBase64String(image); 
      

  5.   

    转换函数#region "字符串图片转换"/// <summary>
    /// 将Base64转成图片
    /// </summary>
    /// <param name="str">Base64字符串</param>
    /// <returns>图片</returns>
    /// <res></res>
    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>
    /// <res></res>
    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
      

  6.   

    呵呵...我自己找到问题的原因了,用google搜索“0x1F8B08 sql server image”(关键字很重要,用对了事半功倍), 第一条结果就给出了原因,原来这个数据是由压缩的xml文件格式写入的,读出来之后进行解压就可以了,还是要感谢各位,“答者有分”!