面试遇一题(要求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...开头的数据值,诸位有何高见?
FieldName DataCurrent
FieldValue 0x1F8B0800000000000400EDBD07601C4996...(数据很大,略)用一个普通xml文件先转换为Image字段值后,发现:
FieldName DataCurrent
FieldValue 0x3C3F786D6C2076657273696F6E3D22312E30...(数据很大,略)该xml文件开头为:
<?xml version="1.0" encoding="utf-16"?><...>采用各种不同的编码转换,如ASICC,UNICODE,UTF32,UTF8均未能转换成数据库中以0x1F8B...开头的数据值,诸位有何高见?
解决方案 »
- richtextbox 中的一行字的颜色各不相同该怎么实现?
- 看我这句SQL对不?
- 超难问题:( 如何基于浏览器获取网站页面内容,非高手莫进!
- 老问题,.h文件编译成.dll
- SharpZipLib为何不能解压缩WINRAR压缩的文件,出现"Wrong Local header signature: 0xE23EB8E4"的错误?
- 我在vs2005用grid_view的RowCommand这个事件,为什么会出错??
- FileOpenDialog 框中增加 一个 密码输入框 怎么加 ?
- 高分求助:那儿有流程图控件资料
- asp.net在服务端IIS中无法调用一个自己创建的组件
- multipage selectedchanged event 问题
- c# MDI 子窗体之间切换
- 怎么只测试窗口?
或
BitConverter.ToString
还有其他很多方法
XmlDocument doc = new XmlDocument();
string xml = Encoding.ASCII.GetString(image); //该处试过不同的编码格式
File.WriteAllText(@"D:\test.xml", xml);我个人都怀疑,这数据库中的数据是否有问题:0x1F8B08...,因为正常的转换xml到数据库的image字段中,一般值都是0x3C3F...
别这样用,他不是字符串形式,不要用字符编码,这样
string xml = Convert.ToBase64String(image);
/// 将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