C#与JAVA Base64编码问题~图片不能还原?

全栈极简
博客专家认证
2011-02-16 04:07:18
情况是这样的:
C#调用JAVA的webservice,把数据插入系统数据库,其中有一个xml节点是图片的base64编码,封装成xml文档后,抛给webservice,导入成功后,oracle数据库中的图片是黑的,而且像矩阵式的方形点阵。

有点郁闷,一天了还是没有解决,想请教下大家,谢谢!
...全文
1585 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
jim-single 2013-01-21
  • 打赏
  • 举报
回复
其实我也是搞公安项目项目的, 对接那个六合一平台, 这个图片搞了我好几天了 , 晕死了,,, 都不知道该怎么搞了,  
jim-single 2013-01-21
  • 打赏
  • 举报
回复
哥们,我使用的java调用的上传上去, 是这样的,难道也是这个问题!! , 我都弄了好几天了, 我是将整个xml 进行utf-8 转换了, 应该就没有问了 吧 !,可是还是不行,,
luqinlive 2012-12-28
  • 打赏
  • 举报
回复
 HttpUtility.UrlEncode(str.ToString(), System.Text.Encoding.UTF8)
luqinlive 2012-12-28
  • 打赏
  • 举报
回复
给力, 问题解决了,
zf_fz 2012-12-12
  • 打赏
  • 举报
回复
楼主,是如何转utf-8编码,我这样写,但是还是不能显示图片 byte[] encodeBytesPic = Encoding.UTF8.GetBytes("base64string"); string pic = Encoding.UTF8.GetString(encodeBytesPic); 但还是不成功,请赐教,在线等啊!!!!
tenglingbo 2012-01-06
  • 打赏
  • 举报
回复
是如何转utf-8编码是的啊。请教了。
tenglingbo 2012-01-06
  • 打赏
  • 举报
回复
我也有类似的情况,不知如何将image内容编码成utf-8的。我也试了好多的方法就是不成功。
全栈极简 2011-12-17
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 dongwei_sy 的回复:]
引用 19 楼 guwei4037 的回复:

谢谢大家,我找到原因了!
是接口xml文档封装的问题,跟base64编码没有关系。xml文档中image1的内容需要的utf-8编码,经过base64编码加密后的字符串转为utf-8,再上传就OK了。。。
反过来说明,调用别人的接口没有说明文档是多么的痛苦。。。
碰巧让我试成功了。。。
按照你的方法,我也成功了,跟你情况一模一样,我这边是……
[/Quote]

是的。
dongwei_sy 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 guwei4037 的回复:]

谢谢大家,我找到原因了!
是接口xml文档封装的问题,跟base64编码没有关系。xml文档中image1的内容需要的utf-8编码,经过base64编码加密后的字符串转为utf-8,再上传就OK了。。。
反过来说明,调用别人的接口没有说明文档是多么的痛苦。。。
碰巧让我试成功了。。。
[/Quote]按照你的方法,我也成功了,跟你情况一模一样,我这边是公安业务接口,不知道你是不是
netaass123 2011-06-21
  • 打赏
  • 举报
回复
云游。。。。。
宝_爸 2011-02-17
  • 打赏
  • 举报
回复
用你base64之前的数据和oracle中存的数据比较一下。一样就没有问题了。

Base64编码解码都是标准,java和.net的支持都应该没有问题。
全栈极简 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 qldsrx 的回复:]
我想知道,你这里图片是黑的是哪里看起来黑的?是不是用.NET程序加载的时候是黑的?还是说.NET加载就根本不成功?
另外纠正一下,base64编码是语言无关的,但是你的MemoryStream却是语言相关的,你数据库中加载的字节数组放到MemoryStream中处理,肯定是有C#和JAVA的区别了。
[/Quote]

是用的pl/sql工具,直接打开blob类型图片看出来是黑的。
qldsrx 2011-02-17
  • 打赏
  • 举报
回复
我想知道,你这里图片是黑的是哪里看起来黑的?是不是用.NET程序加载的时候是黑的?还是说.NET加载就根本不成功?
另外纠正一下,base64编码是语言无关的,但是你的MemoryStream却是语言相关的,你数据库中加载的字节数组放到MemoryStream中处理,肯定是有C#和JAVA的区别了。
xxmiiiiiiiiii 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sp1234 的回复:]

引用 5 楼 guwei4037 的回复:
我是直接从oracle数据库中用select * from table语句获取了图片对象image1(object),然后用(byte[])image1,强制转换为字节数组


这个地方要及时“打住”!

你得到的字节数组还是原来的图片吗?测试一下!写一个程序,把你的字节数组保存成文件,然后用一个看图片的程序打开看看。如果不是,你传给别人,……
[/Quote]

可以的 我也这样存图片 用强制转换可以转为BYTE[]
全栈极简 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jaylongli 的回复:]
你在本机上试下 先编码 然后解码 看出错不
[/Quote]

不报错啊,先编码再解码,图片都能正常显示 - -
全栈极简 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sp1234 的回复:]
引用 5 楼 guwei4037 的回复:
我是直接从oracle数据库中用select * from table语句获取了图片对象image1(object),然后用(byte[])image1,强制转换为字节数组


这个地方要及时“打住”!

你得到的字节数组还是原来的图片吗?测试一下!写一个程序,把你的字节数组保存成文件,然后用一个看图片的程序打开看看。如果不是,你传给别人,别……
[/Quote]



DataRow dr = ds.Tables["temp_pic"].Rows[0];
byte[] buffer = (byte[])dr["imagedata1"];
//string base64Str = Convert.ToBase64String(bytes);
//byte[] buffer = Convert.FromBase64String(base64Str);
MemoryStream ms2 = new MemoryStream(buffer, 0, buffer.Length);
ms2.Seek(0, SeekOrigin.Begin);
Image image2 = Image.FromStream(ms2);
pictureBox1.Image = image2;

正常显示啊?没有问题啊?
加油馒头 2011-02-17
  • 打赏
  • 举报
回复
你在本机上试下 先编码 然后解码 看出错不
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 guwei4037 的回复:]
我是直接从oracle数据库中用select * from table语句获取了图片对象image1(object),然后用(byte[])image1,强制转换为字节数组
[/Quote]

这个地方要及时“打住”!

你得到的字节数组还是原来的图片吗?测试一下!写一个程序,把你的字节数组保存成文件,然后用一个看图片的程序打开看看。如果不是,你传给别人,别人可能无法。
全栈极简 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wxr0323 的回复:]
最近也在做类似这样结构的系统。。但是还没涉及到图片的问题。。

是不是两边的编码不统一导致的。

你分析分析发过来的数据包。。
[/Quote]

JAVA的WebService是别的厂家开放的,我们在这基础上做一个应用,但是就出现了图片编码的问题~
调用对方的服务,出错描述都不清楚,而且还没有文档。。。
全栈极简 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]
JAVA中输出看看
http://topic.csdn.net/u/20090903/16/41cf7016-68a8-431f-a325-d383ac1b6c52.html
[/Quote]
我现在很怀疑是不是JAVA跟.NET的编码不一致造成的,但是base64编码应该是一种标准吧?理论上应该是一样的吧?
加载更多回复(9)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧