欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程语言 > c# >内容正文

c#

c#编码、解码 -凯发k8官方网

发布时间:2025/1/21 c# 19 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 c#编码、解码 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1、httputility.urlencode 方法:

对 url 字符串进行编码,以便实现从 web 服务器到客户端的可靠的 http 传输。重载列表:

[1]将字节数组转换为已编码的 url 字符。 [c#] public static string urlencode(byte[]);

[2]对 url 字符串进行编码。 [c#] public static string urlencode(string);

[3]使用指定的编码对象对 url 字符串进行编码。 [c#] public static string urlencode(string, encoding);

[4]从数组中的指定位置开始一直到指定的字节数为止,将字节数组转换为 url 编码的字符串。 [c#] public static string urlencode(byte[], int, int);

2、httputility.urldecode 方法:

将已经为在 url 中传输而编码的字符串转换为解码的字符串。重载列表:

[1][c#] public static string urldecode(string);

[2]使用指定的解码对象将 url 编码的字节数组转换为已解码的字符串。 [c#] public static string urldecode(byte[], encoding);

[3]使用指定的编码对象将 url 编码的字符串转换为已解码的字符串。 [c#] public static string urldecode(string, encoding);

[4]使用指定的编码对象,从数组中的指定位置开始到指定的字节数为止,将 url 编码的字节数组转换为已解码的字符串。

[c#] public static string urldecode(byte[], int, int, encoding);

3、server是httpserverutility类的实例,是system.web.ui.page的属性。

httpserverutility.urlencode 方法:

编码字符串,以便通过 url 从 web 服务器到客户端进行可靠的 http 传输。重载列表:

[1]对字符串进行 url 编码,并返回已编码的字符串。 [c#] public string urlencode(string);

[2]url 对字符串进行编码,并将结果输出发送到 textwriter 输出流。 [c#] public void urlencode(string, textwriter);

例: string str= "中国";

       stringwriter writer = new stringwriter();

       server.urlencode(str, writer);

       string encodedstring = writer.tostring();

4、httpserverutility.urldecode 方法:

对字符串进行解码,该字符串为了进行 http 传输而进行编码并在 url 中发送到服务器。重载列表 :

[1]对字符串进行 url 解码并返回已解码的字符串。 [c#] public string urldecode(string);

[2]对在 url 中接收的 html 字符串进行解码,并将结果输出发送到 textwriter 输出流。 [c#] public void urldecode(string, textwriter);

注意:

1、httputility.urlencode,httputility.urldecode是静态方法,而server.urlencode,server.urldecode是实例方法。

2、server是httpserverutility类的实例,是system.web.ui.page的属性。

3、用httputility.urlencode编码后的字符串和用server.urlencode进行编码后的字符串对象不一样:

例如: string url="http://localhost:4349/name=中国";

         response.write(httputility.urlencode(url));

         response.write("
");

         response.write(server.urlencode(url));

输出结果是:

http://localhost:4349/name=中国

http%3a%2f%2flocalhost%3a4349%2fname%3d%e4%b8%ad%e5%9b%bd

原因:server.urlencode的编码方式是按照本地程序设置的编码方式进行编码的,而httputility.urlencode是默认的按照.net的utf-8格式进行编码的。

如果改一下程序: string url="http://localhost:4349/name=中国";

response.write(httputility.urlencode(url,system.text.encoding.getencoding("gb2312")));

response.write("
");

response.write(server.urlencode(url));

输出的结果是:

http%3a%2f%2flocalhost%3a4349%2fname%3d%e4%b8%ad%e5%9b%bd

http%3a%2f%2flocalhost%3a4349%2fname%3d%e4%b8%ad%e5%9b%bd

4、有时候可能别的系统传递过来的url是用别的编码方式编码的。 介绍一个方法,可以获取指定编码格式的querystring。

public string getnonnullquerystring(string key,encoding encoding) {//引用system.collections.specialized和system.text命名空间string stringvalue;system.collections.specialized.namevaluecollection encodingquerystring;//该方法是在2.0中新增的encodingquerystring = httputility.parsequerystring(request.url.query,encoding);//'里面的key就是你提交的参数的keyreturn encodingquerystring[key] != null ? encodingquerystring[key].trim() : ""; }

 调用: string url = getnonnullquerystring("url",encoding.utf8).trim();

 

在对url进行编码时,该用哪一个?这两都使用上有什么区别吗?

测试: string file="文件上(传)篇.doc"; string server_urlencode=server.urlencode(file); string server_urldecode=server.urldecode(server_urlencode); string httputility_urlencode=system.web.httputility.urlencode(file); string httputility_urldecode=system.web.httputility.urldecode(httputility_urlencode); response.write("原数据:" file); sfun.writeline("server.urlencode:" server_urlencode); sfun.writeline("server.urldecode:" server_urldecode); sfun.writeline("httputility.urlencode:" httputility_urlencode); sfun.writeline("httputility.urldecode:" httputility_urldecode);输出: 原数据:文件上(传)篇.doc server.urlencode:�ļ��ϣ�����ƪ.doc server.urldecode:文件上(传)篇.doc httputility.urlencode:文件上(传)篇.doc httputility.urldecode:文件上(传)篇.doc

区别在于:httputility.urlencode()默认是以utf8对url进行编码,而server.urlencode()则以默认的编码对url进行编码。


       在用 asp.net 开发页面的时候, 我们常常通过 system.web.httputility.urlencode 和 urldecode 在页面间通过 url 传递参数. 成对的使用 encode 和 decode 是没有问题的.
      但是, 我们在编写文件下载的页面的时候, 常常用如下方法来指定下载的文件的名称: response.addheader("content-disposition","attachment; filename=" httputility.urlencode(filename, encoding.utf8)); 之所以转换成 utf8 是为了支持中文文件名.
出现问题:

因为 httputility.urlencode 在 encode 的时候, 将空格转换成加号(' '), 在 decode 的时候将加号转为空格, 但是浏览器是不能理解加号为空格的, 所以如果文件名包含了空格, 在浏览器下载得到的文件, 空格就变成了加号.
解决办法:

在 httputility 的 urlencode 之后, 将 " " 替换成 " "( 如果原来是 " " 则被转换成 "+" ) , 如:

filename = httputility.urlencode(filename, encoding.utf8);

filename = filename.replace(" ", " ");

不明白微软为什么要把空格转换成加号而不是" ". 记得 jdk 的 urlencoder 是将空格转换成 " "的. 经检查, 在 .net 2.0 也是这样.

总结

以上是凯发k8官方网为你收集整理的c#编码、解码的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图