今天在測試自己寫的郵件模塊的時候,發現客戶端收到的郵件標題是亂碼,於是學習了一下perl中對字符串處理的機制,再次記錄下,也希望以後對其他朋友有所幫助
首先perl只能處理2種編碼的格式,ascii碼和utf-8.
那麼perl首先要確定一個字符串是octets還是utf8編碼,他完全是靠字符串上的utf8 flag.
在perl內部,字符串結構由兩部分組成: [utf8 + 數據].如果utf8 flag是on的話, perl就會把它當成utf8字符串來處理, 如果utf8 flag爲off, perl就會把它當成octets來處理. 所有字符串相關的函數包括正則表達式都會受utf8 flag的影響.
處理中文亂碼的解決方法:
#處理字符串要依賴Encode這個庫,如果沒有可以使用以下命令安裝:
cpan Encode
待安裝完成之後,使用encode庫對字符串操作即可
#!/use/bin/perl use strict; use warnings; use Lib::SMTP; use Encode; my $mail_title=decode("utf8","這裏是郵件標題"); my $mail_subject=decode("utf8","這裏是郵件內容"); my $mail_to='[email protected]'; sendmail("$mail_to","$mail_title","$mail_subject"); #sendmail是我自己寫的一個調用第三方smtp服務器發郵件的一個函數,並非perl自帶函數
經過decode之後,收到的郵件顯示正常