encode, decode, urlencode和urldecode辨析


  本文對encode、decode、urlencode和urldecode幾個概念的含義進行對比分析。


encoding和decoding

  在計算機科學中,encoding指把一個字符序列,按照某種特定的規則,轉換為一種特定的格式。decoding的含義反之。

  在文本處理的編碼轉換中,encoding指把字符流按照某種編碼轉換為字節流,decoding指把字節流根據其編碼還原為字符流。

  一些編程語言中,內置了相應的函數調用。

  如在python中,內部的字符串編碼是unicode。當讀取一個UTF-8編碼的文件內容后,實際保存的是字節流。如果要轉換為字符流,需要調用decoding函數進行解碼。如下例子所示:

file = open(file_path)
line = file.readline()
line = line.decode("UTF-8")

  這段代碼執行后,line的內容是 以unicode格式保存的字符串。

  再看一下Perl。Perl 5.6之后內部字符串以UTF-8方式存在。上述的邏輯,用Perl實現是這樣的:

 open INPUT $file_path
 my $line = <INPUT>
 $line = decode("utf8", $line)

 這里需要使用use Encode引入Encode包。如果在讀取文件時已經指定了編碼,那么就不需要再單獨做decode解碼了。如下所示,

 open INPUT ”<:utf8" $file_path
 my $line = <INPUT>

    對於非IO讀入,而在代碼中硬編碼的字符串,可以理解為字節流,其編碼與文件編碼一致。

    在進行字符串操作前,建議統一采用decode解碼,這樣可以保證內部處理的一致性和正確性。

    在python或者Perl中,如果要把字符串輸出,最好不要直接輸出,而是先編碼為字節流再輸出。否則,有可能報錯。

    如在python中輸出某一行到屏幕,

 line = line.encode("UTF8")
print line

urlencode和urldecode

  urlencode對URL進行編碼。URL是一個字符串,urlencode把它理解為一個字節流,直接對每個字節進行轉換,轉換規則是把每個字節轉換為%HH的形式,HH等於字節的ASCII碼值。如果URL中包含了中文參數,根據中文參數編碼的區別,會決定urlecode的結果有所不同。

  urldecode是把經過urlencode編碼后得到的字符串還原為原始狀態,根據urlencode的規則可知,urldecode的輸入字符都在ASCII編碼的范圍內。

  在python中,提供了urlencode包。

  下面是一段實際的代碼:

  from urllib import urlencode
url = "http://www.google.com/search?" + "%s"
key = "字符串";
mass = {}
mass["key"] = key
params = urlencode(mass)
encode_url = url % params

這一段程序源碼的編碼是UTF-8,encode_url即為encode之后的url:

http://www.google.com/search?key=%E5%AD%97%E7%AC%A6%E4%B8%B2

用Perl語言的話,通過調用unpack函數實現。

 my $url = "http://www.google.com/search?key=";
my $query = "字符串";
$query =~ s/(\W)/sprintf("%%%02x", unpack("C", $1))/eg;
my $encode_url = $url . $query;

Author: shiqi.cui <cuberub@gmail.com>

Date: 2009-05-17


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM