最近做一个项目,是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); }

  

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

  1. Java EE业务处理流程与XML的引入

    Java EE基于MVC架构的业务处理流程 MVC架构业务处理流程 XML定义 XML是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言.XML被设计用于数据的存 ...

  2. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  3. Java是如何读到hbase-site.xml 的内容的

    Java是如何读到hbase-site.xml 的内容的 Java客户端使用的配置信息是被映射在一个HBaseConfiguration 实例中. HBaseConfiguration有一个工厂方法, ...

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

    通过http请求传递xml流和接收xml流的代码示例 //1.在servlet中post一个xml流:import java.io.OutputStreamWriter;import org.jdom ...

  5. 将Java对象序列化成JSON和XML格式

    1.先定义一个Java对象Person: public class Person { String name; int age; int number; public String getName() ...

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

    刚接触安卓开发,试着写个小程序熟悉下,就写了天气预报的小程序,通过httpUrlConnection读流的方式来获取网络公共接口提供的天气XML信息.但在建立http连接时一直报java.io.EOF ...

  7. nested exception is java.lang.RuntimeException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'daoSupport': ...

  8. Java程序员的10道XML面试题

    包括web开发人员的Java面试在内的各种面试中,XML面试题在各种编程工作的面试中很常见.XML是一种成熟的技术,经常作为从一个平台到其他平台传输数据的标准.XML面试问题包括用于转换XML文件的X ...

  9. Android(java)学习笔记185:xml文件生成

    1.xml文件: 用元素描述数据,跨平台. 2.利用传统的方式创建xml文件,下面是一个案例: 设计思路:建立一个学生管理系统,创建xml文件保存学生信息: (1)首先是布局文件activity_ma ...

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

    XML 1.引入dom4j-2.0.0.jar 2.引入jquery-1.8.2.js 3.新建common.js getInfo = function(){ $.post("getXmlA ...

随机推荐

  1. Golang与MySQL

    1. 在golib下载go-sql-driver/mysql go get github.com/go-sql-driver/mysql 2. 代码引入 import ( "database ...

  2. Paragon NTFS for Mac免费获取官方赠送正版.更新获取ntfs for mac 14方法

    Paragon NTFS for Mac免费获取官方赠送正版,没有这个软件的朋友赶紧收下.获取地址http://www.paragon-drivers.com/cn/ntfs-mac-free/ntf ...

  3. 【HTML5】炫丽的时钟效果Canvas绘图与动画基础练习

    源自慕课网 效果如下: 全部代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  4. iOS-动态调整UITableViewCell的高度

    OS-动态调整UITableViewCell的高度iOS开发文档, by 友盟翻译组 stefaliu. 大概你第一眼看来,动态调整高度是一件不容易的事情,而且打算解决它的第一个想法往往是不正确的.在 ...

  5. Menu MenuItem

    Menu & MenuItem learning note Menu MenuItem MSDN Sample Code <Menu Grid.Row="0" Hor ...

  6. urllib3 ProxyManager

    ProxyManager is an HTTP proxy-aware subclass of PoolManager. It produces a singleHTTPConnectionPool ...

  7. ArcGIS Server10.2服务启动不了之http://localhost:6080/arcgis/manager无法打开之arcMap 无法打开6080admin问题解决之路

    遇到的问题:在services.msc中可以正常启动arcGIS server ,但是过几秒种服务就自动关闭, 而且manager打不开, 各种方法都试过了,什么关闭杀毒软件,更改服务配置文件,更改a ...

  8. ubuntu 10.04 fcitx 4.12 实现按下shit切换输入法同时提交英文输入

    安装: echo "add fcitx ppa..." sudo apt-add-repository ppa:fcitx-team/nightly sudo apt-get in ...

  9. graphicsMagick 文档

    ImageMagick资料 ---------------------------------------------------------------------------- ImageMagi ...

  10. 微软Hololens学院教程-Hologram 220-空间声音(Spatial sound )【本文是老版本,与最新的微软教程有出入】

    这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦! 原文链接https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...