JS和C#都内置了编码和解码的功能,并提供了多种编码和解码方式。下面我将具体讲解JS和C#中的编码和解码,并提供两个示例来演示编码和解码的过程。
JS中的编码和解码
在JS中,我们通常使用encodeURI
和encodeURIComponent
来对URL进行编码,使用decodeURI
和decodeURIComponent
对URL进行解码。下面是具体的使用方式:
encodeURI
var uri = 'https://www.example.com/读书?category=编程';
var encodedUri = encodeURI(uri);
console.log(encodedUri); // https://www.example.com/%E8%AF%BB%E4%B9%A6?category=%E7%BC%96%E7%A8%8B
encodeURI
的作用是对URL进行编码,其中除了特定字符(例如::/?#[]@!$&'()*+,;=
)外的所有字符都不会被编码。在上面的示例中,:
、/
、?
、=
等特定字符没有被编码,而中文字符则被编码成了%E8%AF%BB%E4%B9%A6
。
encodeURIComponent
var uri = 'https://www.example.com/读书?category=编程';
var encodedUriComponent = encodeURIComponent(uri);
console.log(encodedUriComponent); // https%3A%2F%2Fwww.example.com%2F%E8%AF%BB%E4%B9%A6%3Fcategory%3D%E7%BC%96%E7%A8%8B
与encodeURI
不同的是,encodeURIComponent
会对除了字母、数字、-
、_
、.
、!
、~
、*
、'
、(
和)
之外的所有字符进行编码。在上面的示例中,字母、数字、-
、_
、.
等字符没有被编码,而中文字符则被编码成了%E8%AF%BB%E4%B9%A6
。
decodeURI
var encodedUri = 'https://www.example.com/%E8%AF%BB%E4%B9%A6?category=%E7%BC%96%E7%A8%8B';
var uri = decodeURI(encodedUri);
console.log(uri); // https://www.example.com/读书?category=编程
decodeURI
的作用是对URL进行解码,与encodeURI
相对应。在上面的示例中,%E8%AF%BB%E4%B9%A6
被解码成了中文字符。
decodeURIComponent
var encodedUriComponent = 'https%3A%2F%2Fwww.example.com%2F%E8%AF%BB%E4%B9%A6%3Fcategory%3D%E7%BC%96%E7%A8%8B';
var uri = decodeURIComponent(encodedUriComponent);
console.log(uri); // https://www.example.com/读书?category=编程
与encodeURIComponent
相对应的是decodeURIComponent
,功能是对URL进行解码。在上面的示例中,%E8%AF%BB%E4%B9%A6
被解码成了中文字符。
C#中的编码和解码
在C#中,我们可以使用System.Net.WebUtility
和System.Web.HttpUtility
两个类来进行编码和解码,这两个类提供了多种编码和解码方式。下面是具体的使用方式:
System.Net.WebUtility
string uri = "https://www.example.com/读书?category=编程";
string encodedUri = WebUtility.UrlEncode(uri);
Console.WriteLine(encodedUri); // https%3a%2f%2fwww.example.com%2f%e8%af%bb%e4%b9%a6%3fcategory%3d%e7%bc%96%e7%a8%8b
WebUtility.UrlEncode
的作用是对URL进行编码,与JS中的encodeURIComponent
一致。在上面的示例中,:
、/
、?
、=
等特定字符都被编码成了%3a
、%2f
、%3f
和%3d
,而中文字符则被编码成了%e8%af%bb%e4%b9%a6
和%e7%bc%96%e7%a8%8b
。
string encodedUri = "https%3a%2f%2fwww.example.com%2f%e8%af%bb%e4%b9%a6%3fcategory%3d%e7%bc%96%e7%a8%8b";
string uri = WebUtility.UrlDecode(encodedUri);
Console.WriteLine(uri); // https://www.example.com/读书?category=编程
与JS中的decodeURIComponent
相似,WebUtility.UrlDecode
的作用是对URL进行解码。在上面的示例中,%e8%af%bb%e4%b9%a6
和%e7%bc%96%e7%a8%8b
被解码成了中文字符。
System.Web.HttpUtility
string uri = "https://www.example.com/读书?category=编程";
string encodedUri = HttpUtility.UrlEncode(uri);
Console.WriteLine(encodedUri); // https%3a%2f%2fwww.example.com%2f%e8%af%bb%e4%b9%a6%3fcategory%3d%e7%bc%96%e7%a8%8b
HttpUtility.UrlEncode
的作用与WebUtility.UrlEncode
一致,在上面的示例中的结果也是一样的。
string encodedUri = "https%3a%2f%2fwww.example.com%2f%e8%af%bb%e4%b9%a6%3fcategory%3d%e7%bc%96%e7%a8%8b";
string uri = HttpUtility.UrlDecode(encodedUri);
Console.WriteLine(uri); // https://www.example.com/读书?category=编程
同样的,HttpUtility.UrlDecode
的作用与WebUtility.UrlDecode
一致,在上面的示例中的结果也是一样的。
综上所述,无论是JS还是C#,我们都可以使用内置的编码和解码函数对URL进行处理,以处理URL中的特殊字符。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS与C#编码解码 - Python技术站