default.aspx
----------------------
private void Page_Load(object sender, System.EventArgs e)
{
string url1 = "http://localhost/Test.asp";
string url2 = "http://localhost/Test.aspx";
string data =
@"<?xml version=""1.0""?>
<params>
<action>createService</action>
<paramT>中国</paramT>
</params>
";
string strRet = PostXmlToUrl(url1,data);
Response.Write(strRet);
string strRet = PostXmlToUrl(url2,data);
Response.Write(strRet); Response.End();
}protected string PostXmlToUrl(string url,string data)
{
HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(url);
hwr.Method = "POST"; Stream stream = hwr.GetRequestStream(); StreamWriter sw = new StreamWriter(stream,System.Text.Encoding.UTF8);
sw.Write(data);
sw.Close(); stream = hwr.GetResponse().GetResponseStream(); StreamReader sr = new StreamReader(stream,System.Text.Encoding.UTF8);
string ret = sr.ReadToEnd();
sr.Close(); return ret;
}===================test.aspx
------------------------------
private void Page_Load(object sender, System.EventArgs e)
{
byte[] buf = Request.BinaryRead(Request.ContentLength);
string str = System.Text.Encoding.GetEncoding("utf-8").GetString(buf);
Response.Write(str);
Response.End();
}===========================================test.asp
----------------------------------
<%dim buf ,str
dim ms
buf = Request.binaryRead(Request.TotalBytes)
str = Bytes2bStr(buf)
Response.Write(str)
Response.End()'' Byte流到Char流的转换函数
'' Code By:evlon
'' 参考:忘记了
Function Bytes2BSTR(vin)
Dim ms,strRet Set ms = Server.CreateObject("ADODB.Stream") '建立流对象
ms.Open '默认 adTypeText
ms.WriteText vin '把vin写入流对象中
ms.Position = 0 '设置流对象的起始位置是0 以设置Charset属性
ms.Charset = "gb2312" '设置流对象的编码方式为GB2312
ms.Position = 1 '设置流对象的起始位置是1 不知道为什么是1,如果是0,则前面有?出现 strRet = ms.ReadText '取字符流
ms.close '关闭流对象
Set ms = nothing Bytes2bStr = strRetEnd Function
%>================================================================
注意
ms.Charset = "gb2312" 为什么?
----------------------
private void Page_Load(object sender, System.EventArgs e)
{
string url1 = "http://localhost/Test.asp";
string url2 = "http://localhost/Test.aspx";
string data =
@"<?xml version=""1.0""?>
<params>
<action>createService</action>
<paramT>中国</paramT>
</params>
";
string strRet = PostXmlToUrl(url1,data);
Response.Write(strRet);
string strRet = PostXmlToUrl(url2,data);
Response.Write(strRet); Response.End();
}protected string PostXmlToUrl(string url,string data)
{
HttpWebRequest hwr = (HttpWebRequest)HttpWebRequest.Create(url);
hwr.Method = "POST"; Stream stream = hwr.GetRequestStream(); StreamWriter sw = new StreamWriter(stream,System.Text.Encoding.UTF8);
sw.Write(data);
sw.Close(); stream = hwr.GetResponse().GetResponseStream(); StreamReader sr = new StreamReader(stream,System.Text.Encoding.UTF8);
string ret = sr.ReadToEnd();
sr.Close(); return ret;
}===================test.aspx
------------------------------
private void Page_Load(object sender, System.EventArgs e)
{
byte[] buf = Request.BinaryRead(Request.ContentLength);
string str = System.Text.Encoding.GetEncoding("utf-8").GetString(buf);
Response.Write(str);
Response.End();
}===========================================test.asp
----------------------------------
<%dim buf ,str
dim ms
buf = Request.binaryRead(Request.TotalBytes)
str = Bytes2bStr(buf)
Response.Write(str)
Response.End()'' Byte流到Char流的转换函数
'' Code By:evlon
'' 参考:忘记了
Function Bytes2BSTR(vin)
Dim ms,strRet Set ms = Server.CreateObject("ADODB.Stream") '建立流对象
ms.Open '默认 adTypeText
ms.WriteText vin '把vin写入流对象中
ms.Position = 0 '设置流对象的起始位置是0 以设置Charset属性
ms.Charset = "gb2312" '设置流对象的编码方式为GB2312
ms.Position = 1 '设置流对象的起始位置是1 不知道为什么是1,如果是0,则前面有?出现 strRet = ms.ReadText '取字符流
ms.close '关闭流对象
Set ms = nothing Bytes2bStr = strRetEnd Function
%>================================================================
注意
ms.Charset = "gb2312" 为什么?
解决方案 »
- .net 如何将鼠标移到dropdownlist上时显示完整数据啊? 谢谢
- 数据库表字段自动加一 奉100分以致谢高手,表达敬意
- 有人使用过membership吗?
- 编译器错误信息: CS0117: “string”并不包含“DataSource”的定义,啥意思
- 问: asp.net中怎么打开Excel服务? 在线等.
- 请问目前那一款的ASP。Net代码自动生成工具最好?
- 在VS中调试ASP代码,断点不起作用~
- 还是刷新问题 :(
- 谁人告诉我树怎么用?
- datagrid实现显示新闻列表
- 采鸟求救!我想在Datagrid控件中的checkbox控件中增加javascript脚本,然后在网页验证checkbox控件是否被选中。
- 如何得到一个礼拜后的日期:
早些年上网的朋友都知道,NS或IE浏览器早期的版本并不支持多国语言的浏览,如果想浏览繁体中文、日文等外文网站还需要一个如“中文之星”或“四通立方”的外挂软件,后来浏览器逐步发展升级,到目前为止,几乎所有浏览器都支持多国语言字符,可以浏览任意国家、语言的网站。Blog的出现,特别是Trackback的出现,使网络国际化的行为由被动的浏览信息向主动式的交互信息过渡,然而新的语言障碍问题又出现了...问题主要出在Blog的Trackback(引用)、Ping(通告)、Notification(通知书)等交互具有的功能上。以前我们在理解和应用网络上的交互主要局限在C-S范围之内,也就是客户(个人)与服务器(网站)之间的信息交互,例如:在网络上发布一篇文章或回复一个论坛帖子,一般来讲这样的交互很少会出现语言不兼容的问题。然而Blog中的Trackback等的交互方式不只是C-S的,它还是S-S(Blog网站之间)的,甚至是多重的,例如在发布一篇文章的时候,你可以同时选择让它同时发布在一个或多个不同的Blog上,或者给指定的人发出更新通知,也可以让更多的人预订、收录你的RSS内容更新信息。Blog的交互方式更多、更灵活,当然,这种交互并非没有限制,语言编码是一个很大障碍,如果你的Blog系统编码是中文简体的GB2312,那么所有Trackback、Ping的交互对象就只能限于国内采用GB2312编码的用户,你的Blog也就无法与台湾、日本等采用非GB2312编码的用户实现交互。比较好的解决办法是采用UTF-8编码,虽然采用UTF-8编码回多占用一些空间(一个汉字需3个字节),但国际化问题总算解决了,UTF-8兼容GB2312、BIG5、EUC-JP等多种国家的语言编码,经测试,采用UTF-8编码的Blog之间的各种交互、通讯没有任何问题。事实上90%以上的台湾Blog都已经舍弃了BIG5,而采用UTF-8的编码方式,而大陆的Blog几乎还都是GB2312编码,看来台湾在国际化方面还是相当领先的。前几日,我将自己的Blog从GB2312编码转为了UTF-8编码,Trackback和Ping了几个台湾朋友的Blog,没有发现问题。看来“国际化”的问题已经解决了,但随之而来有出现了新的问题,我的Blog与国内GB2312编码的Blog又无法交互了,当然这是必然的。我Ping到online-edu.org(网站采用GB2312编码)上的信息都成了乱码。我想问题到此,已经不是技术层面的了。如果你的站点或Blog有国际化交流的需求,可通过采用UTF-8编码的方式来解决,如果没有这个需求,采用GB2312也无大碍。在用户看来都是一样的,编码只是后台的东西。不过我希望Blogger们最好都采用UTF-8编码,因为你的Blog有了Trackback和Ping,它们可是持有国际航班的机票,如果只在本国转悠,确实很浪费。
StreamWriter sw = new StreamWriter(stream,System.Text.Encoding.UTF8);
是用的UTF8编码楼上的取的哪个页面,我取得就是我的发送页面呀。且我用的是UTF8编码呀
==================================
<%
dim buf ,str
dim ms
str = "aaa"
buf = Request.binaryRead(Request.TotalBytes)
str = Bytes2bStr(buf)
call WriteFileLog("log\log.txt",str)
Response.Write(str)Response.End()'' Byte流到Char流的转换函数
'' Code By:evlon
'' 参考:忘记了
Function Bytes2BSTR(vin)
Dim ms,strRet Set ms = Server.CreateObject("ADODB.Stream") '建立流对象
ms.Open '默认 adTypeText
ms.WriteText vin '把vin写入流对象中
ms.Position = 0 '设置流对象的起始位置是0 以设置Charset属性
ms.Charset = "utf-8" '设置流对象的编码方式为utf-8
ms.Position = 8 '设置流对象的起始位置是8 不知道为什么是8,如果是0,则前面有?出现
' ms.Charset = "gb2312" '设置流对象的编码方式为GB2312
' ms.Position = 8 '设置流对象的起始位置是8 不知道为什么是8,如果是0,则前面有?出现 strRet = ms.ReadText '取字符流
ms.close '关闭流对象
Set ms = nothing Bytes2bStr = strRetEnd Function'''将信息写到一个文本文件里
Sub WriteFileLog(sFilename,sMsgContent)
'''参数说明:
'' sMsgContent:信息内容
'' sFilename:相对当前目录的文件名
Dim sMsg,str ,arr
Dim fs,sPage,sFile
Dim sCopName,sDeptName,sUserName,sPath
Set fs=Server.CreateObject("Scripting.FileSystemObject") sMsg=cstr(now) & " " & chr(13) & chr(10) & sMsgContent
if left(sFileName,1)<>"\" then
sFileName="\" & sFileName
end if
sPath=Server.MapPath("./")
arr=split(sFileName,"\")
for each str in arr
if(trim(str)<>"") then
sPath = sPath & "\" & str
if instr(str,".")>0 then
'''先判断文件是否存在,如果不存则新建一个
IF NOT fs.FileExists(sPath) Then
fs.CreateTextFile sPath,True
End IF
else
IF NOT fs.FolderExists(sPath) Then
fs.CreateFolder sPath
End IF
end if
end if
next Set sFile=fs.OpenTextFile(sPath,8)
sFile.WriteLine sMsg
Set sFile=Nothing
Set fs=Nothing
End Sub
%>
====================
运行结果
2005-8-10 9:32:35
<?xml version="1.0" encoding="utf-8"?>
<params>
<Action>createService</Action>
<ServiceGuid>hb0311002_02</ServiceGuid>
<paramT>30</paramT>
<paramS>0</paramS>
<paramC>0</paramC>
<paramOther>aaa=5</paramOther>
<hashcode>52D75B704990233DB8DC727E406A6E09</hashcode>
<timestamp>63259263155578125018120</timestamp>
</params>
2005-8-10 9:32:35
<?xml version="1.0" encoding="utf-8"?>
<params>
<Action>changeService</Action>
<sequenceId>2342134124123412124124124</sequenceId>
<ServiceGuid>hb0311002_02</ServiceGuid>
<paramT>30</paramT>
<paramS>0</paramS>
<paramC>0</paramC>
<paramOther>aaa=4444;b=我来这时在是什么时的事情了</paramOther>
<hashcode>B390FFB9A5128BD8BA281E03E2506774</hashcode>
<timestamp>632592631556562500614402</timestamp>
</params>
2005-8-10 9:32:35
<?xml version="1.0" encoding="utf-8"?>
<params>
<Action>pauseService</Action>
<sequenceId>2342134124123412124124124</sequenceId>
<hashcode>3DF9CDA8374037EC93741FE2046D6602</hashcode>
<timestamp>632592631556718750748735</timestamp>
</params>
2005-8-10 9:32:35
<?xml version="1.0" encoding="utf-8"?>
<params>
<Action>continueService</Action>
<sequenceId>2342134124123412124124124</sequenceId>
<hashcode>C8B73AB4FEDCA5F1C055DFF8EE3677A4</hashcode>
<timestamp>632592631556718750279378</timestamp>
</params>
2005-8-10 9:32:35
<?xml version="1.0" encoding="utf-8"?>
<params>
<Action>cancelService</Action>
<sequenceId>2342134124123412124124124</sequenceId>
<hashcode>01E0242AAF05BD2E56B181E51372B978</hashcode>
<timestamp>63259263155687500054464</timestamp>
</params>
反正现在没有乱码了
流中有字符集格式如:UTF-8:FF FE 在网上找到相关解决方法如下:
=============================================
'Stream_BinaryToString Function
'2003 Antonin Foller, http://www.pstruh.cz
'Binary - VT_UI1 | VT_ARRAY data To convert To a string
'CharSet - charset of the source binary data - default is "us-ascii"
Function Stream_BinaryToString(Binary, CharSet)
Const adTypeText = 2
Const adTypeBinary = 1 'Create Stream object
Dim BinaryStream 'As New Stream
Set BinaryStream = CreateObject("ADODB.Stream") 'Specify stream type - we want To save text/string data.
BinaryStream.Type = adTypeBinary 'Open the stream And write text/string data To the object
BinaryStream.Open
BinaryStream.Write Binary
'Change stream type To binary
BinaryStream.Position = 0
BinaryStream.Type = adTypeText 'Specify charset For the source text (unicode) data.
If Len(CharSet) > 0 Then
BinaryStream.CharSet = CharSet
Else
BinaryStream.CharSet = "us-ascii"
End If 'Open the stream And get binary data from the object
Stream_BinaryToString = BinaryStream.ReadText
End Function
'SimpleBinaryToString converts binary data (VT_UI1 | VT_ARRAY Or MultiByte string)
'to a string (BSTR) using MultiByte VBS functions
Dim I, S
For I = 1 To LenB(Binary)
S = S & Chr(AscB(MidB(Binary, I, 1)))
Next
SimpleBinaryToString = S
End Function这个方法非常简单明了,但是处理大数据流时,比较慢。
建议只用来处理100KB以下的数据。
下面的这个类似的方法,性能稍微好些:
Function BinaryToString(Binary)
'Antonin Foller, http://www.pstruh.cz
'Optimized version of a simple BinaryToString algorithm. Dim cl1, cl2, cl3, pl1, pl2, pl3
Dim L
cl1 = 1
cl2 = 1
cl3 = 1
L = LenB(Binary) Do While cl1<=L
pl3 = pl3 & Chr(AscB(MidB(Binary,cl1,1)))
cl1 = cl1 + 1
cl3 = cl3 + 1
If cl3>300 Then
pl2 = pl2 & pl3
pl3 = ""
cl3 = 1
cl2 = cl2 + 1
If cl2>200 Then
pl1 = pl1 & pl2
pl2 = ""
cl2 = 1
End If
End If
Loop
BinaryToString = pl1 & pl2 & pl3
End Function
BinaryToString方法比SimpleBinaryToString方法性能高20倍。建议用来处理2MB以下的数据。
第二种方法:使用ADODB.Recordset
ADODB.Recordset 可以让你支持几乎所有VARIANT支持的数据类型,你可以用它在string和
binary之间转换。
Function RSBinaryToString(xBinary)
'Antonin Foller, http://www.pstruh.cz
'RSBinaryToString converts binary data (VT_UI1 | VT_ARRAY Or MultiByte string)
'to a string (BSTR) using ADO recordset Dim Binary
'MultiByte data must be converted To VT_UI1 | VT_ARRAY first.
If vartype(xBinary)=8 Then Binary = MultiByteToBinary(xBinary) Else Binary = xBinary Dim RS, LBinary
Const adLongVarChar = 201
Set RS = CreateObject("ADODB.Recordset")
LBinary = LenB(Binary) If LBinary>0 Then
RS.Fields.Append "mBinary", adLongVarChar, LBinary
RS.Open
RS.AddNew
RS("mBinary").AppendChunk Binary
RS.Update
RSBinaryToString = RS("mBinary")
Else
RSBinaryToString = ""
End If
End Function
RSBinaryToString 没有什么限制--除了物理内存之外。这种处理方式是MultiByte方式的100倍!你可以用它来处理高达100MB的数据! 这种转换方式,你也可以用来把MultiByte strings转换为String。下面这个方法把MultiByte strings转换为Binary:Function MultiByteToBinary(MultiByte)
'© 2000 Antonin Foller, http://www.pstruh.cz
' MultiByteToBinary converts multibyte string To real binary data (VT_UI1 | VT_ARRAY)
' Using recordset
Dim RS, LMultiByte, Binary
Const adLongVarBinary = 205
Set RS = CreateObject("ADODB.Recordset")
LMultiByte = LenB(MultiByte)
If LMultiByte>0 Then
RS.Fields.Append "mBinary", adLongVarBinary, LMultiByte
RS.Open
RS.AddNew
RS("mBinary").AppendChunk MultiByte & ChrB(0)
RS.Update
Binary = RS("mBinary").GetChunk(LMultiByte)
End If
MultiByteToBinary = Binary
End Function
第三种:使用ADODB.Stream这种方式是比较常用的:'Stream_BinaryToString Function
'2003 Antonin Foller, http://www.pstruh.cz
'Binary - VT_UI1 | VT_ARRAY data To convert To a string
'CharSet - charset of the source binary data - default is "us-ascii"
Function Stream_BinaryToString(Binary, CharSet)
Const adTypeText = 2
Const adTypeBinary = 1 'Create Stream object
Dim BinaryStream 'As New Stream