关于接收到的xml乱码问题

newpbboy 2010-06-10 03:24:56

System.IO.Stream ns = Request.InputStream;
StreamReader reader = new StreamReader(ns, Encoding.Default);
string xmlMsg = reader.ReadToEnd();

我在接收xml时,读出的xml转化成字符串时,出现乱码,所有的编码方式GBK,gb2312,utf8都试过了,
但是全是乱码,到底是什么问题啊?
我把Stream写的txt中就是对的代码如下:

string StrFileName = "c:\\1.txt";
System.IO.FileStream fs = new System.IO.FileStream(StrFileName, System.IO.FileMode.Create);
System.IO.Stream ns = Request.InputStream;
byte[] nbytes = new byte[512];
int nReadSize = 0;
nReadSize = ns.Read(nbytes, 0, 512);
while (nReadSize > 0)
{
fs.Write(nbytes, 0, nReadSize);
nReadSize = ns.Read(nbytes, 0, 512);
}
fs.Close();
ns.Close();

,没有乱码,但是我要解析这个xml,又必须转化成字符串,怎么办啊?
...全文
451 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxj7256 2011-11-10
  • 打赏
  • 举报
回复
怎么解决啊
  • 打赏
  • 举报
回复
[Quote=引用楼主 newpbboy 的回复:]
我在接收xml时,读出的xml转化成字符串时[/Quote]
你现在的目的是猜测xml串的编码,还是实际跟人合作开发?如果是跟人合作开发,应该看看人家给你传递xml时的产品文档,看看编码是什么方式,然后就按照编码来编程(Encoding.Default在.net平台上就是utf-16,基本上兼容utf-8)。换句话说,如果你按照产生xml的人的文档来编程,如果得到乱码,就可以给他报bug。

而到网上找编码,能回答你什么问题呢?
newpbboy 2010-06-15
  • 打赏
  • 举报
回复
我就是在转化为字符串的时候出现乱码的,怎么办啊?
newpbboy 2010-06-14
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 hwj383 的回复:]
引用 15 楼 newpbboy 的回复:
看不明白,我应该怎么写啊
System.Text.Encoding.Default.GetString(btey[])
中也要有GetString(btey[])啊,这个不是已经是字符了吗


把你的输入流转换成字节数组不就KO了?
[/Quote]
转换成字节数组,然后呢?我还是要解析的啊,解析的时候取某一个节点的值,还是要转化为字符串啊?
zsyok 2010-06-12
  • 打赏
  • 举报
回复
加精...
qiqishardgel 2010-06-12
  • 打赏
  • 举报
回复
帮顶!
「已注销」 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 newpbboy 的回复:]
看不明白,我应该怎么写啊
System.Text.Encoding.Default.GetString(btey[])
中也要有GetString(btey[])啊,这个不是已经是字符了吗
[/Quote]

把你的输入流转换成字节数组不就KO了?
newpbboy 2010-06-11
  • 打赏
  • 举报
回复
关键就是Encoding在处理后就成乱码了啊,GBK,gb2312,utf8,Default都试过了,能试的都试了啊,还是乱码
YISUKU_LEE 2010-06-11
  • 打赏
  • 举报
回复
Encoding。。。。。。

传值接值的问题。。 用Encoding 来处理一下接受值
newpbboy 2010-06-11
  • 打赏
  • 举报
回复
上面就是我的代码啊,就是这个取出来的xml是中文的就乱码,没有其他的了啊?
newpbboy 2010-06-11
  • 打赏
  • 举报
回复
看不明白,我应该怎么写啊
System.Text.Encoding.Default.GetString(btey[])
中也要有GetString(btey[])啊,这个不是已经是字符了吗
「已注销」 2010-06-10
  • 打赏
  • 举报
回复
关键是这句:

System.Text.Encoding.Default.GetString(btey[])

System.Text.Encoding.UTF8.GetString(btey[])
皇城龙三 2010-06-10
  • 打赏
  • 举报
回复
Asp.net XMLHTTP封装类(GET,Post发送和接收数据)发布

XMLHTTP封装类可以向远程发送URL和参数,接受返回信息(无乱码)

复制代码 代码如下:


/**************************************************************** 
* 函数名称:SendCommand(SendMethod method, ST_Param p)
* 功能说明:向远程发送URL和参数,接受返回信息(无乱码);
* 参 数:method:xml发送方法,POST/Get 两种
P:参数结构体
public string Url; //远程URL
public string Parameters; //参数
public string Uid; //帐号
public string Pwd; //号令
* 调用示列:
* using ebcnc; //引用空间名
* XMLHTTP x = new XMLHTTP(); //创建设xmlhttp对像
* XMLHTTP.ST_Param st = new XMLHTTP.ST_Param(); //创建参数数组
* st.Parameters = ""; //url详细参数
* st.Url = "http://www.baidu.com/"; //url
* st.Uid = "" ; //帐号
* st.Pwd = ""; //口令
* string rn=””; //返回字符串
* rn=x.SendCommand(XMLHTTP.SendMethod.POST, st); //获取返回信息
* x.Dispose();

***********************************************************************/
using System;
using MSXML2;
namespace ebcnc
{
/// <summary>
/// XMLHTTP基类
/// </summary>
public class XMLHTTP : IDisposable
{
#region 变量及参数
private XMLHTTPClass xml;
private bool _alreadyDispose = false;

public ST_Param Parameters;

public enum SendMethod : int
{
POST, GET
}
#endregion

#region 参数结构体
public struct ST_Param
{
public string Url;
public string Parameters;
public string Uid;
public string Pwd;
}
#endregion

#region 发送数据
/// <summary>
/// 发送数据
/// </summary>
/// <param name="method">发送方式</param>
/// <param name="p">数据</param>
/// <returns>STRING</returns>
public virtual string SendCommand(SendMethod method, ST_Param p)
{
if (p.Url == null || p.Url == "") return null;
if (method == SendMethod.POST)
{
try
{
xml.open("POST", p.Url, false, p.Uid, p.Pwd);
xml.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xml.send(CommonFunction.UrlEncoding(p.Parameters));
if (xml.status == 200)
{
return System.Text.Encoding.Default.GetString((byte[])xml.responseBody);
}
else
{
return xml.status.ToString();
}
}
catch (Exception E)
{
return E.Message.ToString();
}
}
else if (method == SendMethod.GET)
{
xml.open("GET", p.Url + "?" + CommonFunction.UrlEncoding(p.Parameters), false, p.Uid, p.Pwd);
xml.send(null);
return System.Text.Encoding.Default.GetString((byte[])xml.responseBody);
}
return null;
}
#endregion

#region 构造与释构
public XMLHTTP()
{
xml = new XMLHTTPClass();
}
~XMLHTTP()
{
Dispose();
}
protected virtual void Dispose(bool isDisposing)
{
if (_alreadyDispose) return;
if (isDisposing)
{
if (xml != null)
{
xml = null;
}
}
_alreadyDispose = true;
}
#endregion

#region IDisposable 成员

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

#endregion
}
}
wuyq11 2010-06-10
  • 打赏
  • 举报
回复
使用XmlReade或者XmlDocument来读
XmlDocument doc = new XmlDocument();
doc.Load(Request.InputStream);
Justin-Liu 2010-06-10
  • 打赏
  • 举报
回复
要不就把你完整程序发上来
Justin-Liu 2010-06-10
  • 打赏
  • 举报
回复
说明你试的不够彻底 肯定有一种可以消除乱码
yifanwu 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 newpbboy 的回复:]
解决不了怎么结贴啊,都试过了,不行的啊,还怎么试啊?
[/Quote]


不一定事事都会有结果的
newpbboy 2010-06-10
  • 打赏
  • 举报
回复
解决不了怎么结贴啊,都试过了,不行的啊,还怎么试啊?
Justin-Liu 2010-06-10
  • 打赏
  • 举报
回复
结贴吧 谁试都是那么试的
newpbboy 2010-06-10
  • 打赏
  • 举报
回复
自己顶一下吧,要不就沉底了
加载更多回复(5)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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