java与.net之间xml传递,xml最前面多了个?

最近做一个项目,是java提供webservice供.net调用。参数采用xml格式。
首先碰到的问题:
1).net这边采用XmlSerializer 方式序列化对象传递给对方。对方在本机调试可以收到,但是部署到本机或者服务器上就无法接收,具体是<?xml前面多了个?.
怀疑是java那边的编码问题,一直让他们协助解决。无解,他们采用java的fxt框架,接收的字符串就是那样了。
2)那只能通过.net的编码问题解决,采用纯文本的xml格式,java那边能正常接收。
3)

   XmlSerializer serializer = new XmlSerializer(typeof(T));
            using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
            {
                XmlWriter writer = new  XmlTextWriter(stream, Encoding.UTF8);
                System.Xml.Serialization.XmlSerializerNamespaces ns = new System.Xml.Serialization.XmlSerializerNamespaces();
                ns.Add("", "");//不输出xmlns
                serializer.Serialize(writer, obj, ns);
                stream.Position = 0;
                byte[] buf = new byte[stream.Length];
                stream.Read(buf, 0, buf.Length);
                //result = Convert.ToBase64String(buf);
                result = System.Text.Encoding.UTF8.GetString(buf);

            }

  更改上面的

XmlTextWriter的encoding为default或Gb312,java那边可以正常接收。但是xml格式的encoding变为gb2312,不符合要求。后来看到找到http://blog.csdn.net/dancefire/article/details/1912345

看到"这回输出就正常了。这里需要注意的是Encoding那一行,这是设置Encoding不要输出BOM,否则生成的字符串前会有几个字节表示Byte Order。"

关于BOM,请参考:

Byte Order Mark (BOM) FAQ
  http://unicode.org/faq/utf_bom.html#BOM

Byte-order mark (wikipedia)
  http://en.wikipedia.org/wiki/Byte_Order_Mark

说明的道理就是我现在碰到的问题。依照他的方法,问题解决。代码如下:
using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
            {
                XmlWriterSettings setting = new XmlWriterSettings();
                setting.Encoding = new UTF8Encoding(false);
                setting.Indent = true;
                XmlWriter writer =XmlWriter.Create(stream, setting);
                System.Xml.Serialization.XmlSerializerNamespaces ns = new System.Xml.Serialization.XmlSerializerNamespaces();
                ns.Add("", "");//不输出xmlns
                serializer.Serialize(writer, obj, ns);
                stream.Position = 0;
                byte[] buf = new byte[stream.Length];
                stream.Read(buf, 0, buf.Length);
                //result = Convert.ToBase64String(buf);
                result = System.Text.Encoding.UTF8.GetString(buf);

            }

  

时间: 2024-11-08 23:14:41

java与.net之间xml传递,xml最前面多了个?的相关文章

通过http请求传递xml流和接收xml流的代码示例

通过http请求传递xml流和接收xml流的代码示例 //1.在servlet中post一个xml流:import java.io.OutputStreamWriter;import org.jdom.Document;import org.jdom.Document; public void doPost(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOExcepti

Java进阶学习第五天——XML入门

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.04.14 lutianfei none onsubmit事件 控制表单提交 需要把onsubmit作用在表单上 <form onsubmit=""> 值的写法:onsubmit="return run()" run()必须要有返回值,必须返回true或者false. 如果返回是true,表单可以提交,如果返回false,表单不能提交.如果没有返回值,默认是表单提交. run(

Java web基础总结一之—— xml基础

Java web基础总结之一--xml基础 要学习java web,掌握xml语言是必要的,可以说,在一个java web项目中,xml配置文件无处不在.首先每个java web项目都会有一个web.xml的配置文件.而在各种各样的框架中,xml配置文件更是必不可少.当然,虽然有些框架可以使用注解来实现零配置.但是一般还是习惯于使用配置文件,可以和代码解耦和. 一.Xml基础知识以及语法规范 那首先的问题是,什么是xml?它主要用来做什么? Xml是Extensible Markup Langu

java学习笔记(12) —— Struts2 通过 xml /json 实现简单的业务处理

XML 1.引入dom4j-2.0.0.jar 2.引入jquery-1.8.2.js 3.新建common.js getInfo = function(){ $.post("getXmlAction.action",{name:$('#name').val()},function(ret,status){ if("success" == status) var id = $(ret).find("id").text(); var age = $

蓝鸥成都整理Java程序员的10道XML面试题

蓝鸥成都给大家整理了10道常见的XML面试问答题,这些问题大部分在Java面试中会问到.XML并不依赖于其他编程语言,同SQL一样是编程人员所需要的技能之一,因此在任何技术工作面试之前准备一些XML问题是很有意义的. XML面试问答 这些问题并不很难但涵盖了XML技术的一些重要领域,比如DTD,XML Schema,XSLT转换,XPATH检索,XML绑定,XML解析器以及XML的基本知识,比如命名空间,校验,属性,元素等. 问题1:XML是什么? 答:XML即可扩展标记语言(Extensibl

【java项目实战】dom4j解析xml文件,连接Oracle数据库

简介 dom4j是由dom4j.org出品的一个开源XML解析包.这句话太官方,我们还是看一下官方给出的解释.如下图: dom4j是一个易于使用的.开源的,用于解析XML,XPath和XSLT等语言的库.它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP等编程标准. 特点 dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用的特点,同时它也是一个开放源代码的软件.如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,例

WebService传递XML数据 C#DataSet操作XML 解析WebService返回的XML数据

Webservice传递的数据只能是序列化的数据,典型的就是xml数据.   /// <summary>         /// 通过用户名和密码 返回下行数据         /// </summary>         /// <param name="UserName">用户名</param>         /// <param name="UserPwd">密码</param>    

Android Studio NDK 入门教程(2)--Java与C++之间的简单数据转换与传递

概述 本文将讲解Java与原生代码之间的数据转换,包括基础类型之间的转换,以及数组的传递与转换. 类型转换表 JAVA基础类型与C++之间的对应表 Java类型 C/C++类型 描述 boolean jboolean 无符号8位整数 byte jbyte 无符号8位整数 char jchar 有符号16位整数 short jshort 有符号16位整数 int jint 有符号32位整数 long jlong 有符号64位整数 float jfloat 32位单精度浮点数 double jdou

关于安卓开发当中通过java自带的HttpURLConnection访问XML的java.io.EOFException问题

刚接触安卓开发,试着写个小程序熟悉下,就写了天气预报的小程序,通过httpUrlConnection读流的方式来获取网络公共接口提供的天气XML信息.但在建立http连接时一直报java.io.EOFException,多次尝试无过,但正常的httpUrlConnection却能正常访问. 通过查询Baidu大神,比较多的说法是这是由于httpUrlConnection在某些版本的安卓平台所存在的bug问题,果断改之,通过引用httpClinet外部包来解决该问题,非常成功!代码如下: //外部

传值:web.xml传递参数 即在Servlet中获取web.xml里的值

1 传值:web.xml传递参数 2 3 在web.xml中的Servlet里配置多个init-param 4 <servlet> 5 ... 6 <init-param> 7 <param-name>name</param-name> 8 <param-value>关羽</param-value> 9 </init-param> 10 <init-param> 11 <param-name>age