[VB.NET] FTP檔案名稱特殊符號處理「#」

  FTP檔名包含特殊符號「#」,造成FtpWebRequest出現Exception,顯示的是FTP 550檔案不存在或沒有權限,特殊符號處理過後即正常。

  使用Uri.HexEscape(),將「#」轉換為十六進制表示的ASCII碼,才是可辨別的uri。Uri.HexEscape(CChar("#"))會被轉換成%23

  其他會造成錯誤的特殊符號可能還有「%」、「+」...。

'Handle speceial character in ftp uri to avoid error
Private Function uri_HandleSpecialChar(ByVal str_FtpAddress As String) As Uri

    If str_FtpAddress.Contains("#") Then
        str_FtpAddress = str_FtpAddress.Replace("#", Uri.HexEscape(CChar("#")))
    End If

    If str_FtpAddress.Contains("%") Then
        str_FtpAddress = str_FtpAddress.Replace("%", Uri.HexEscape(CChar("%")))
    End If

    If str_FtpAddress.Contains("+") Then
        str_FtpAddress = str_FtpAddress.Replace("+", Uri.HexEscape(CChar("+")))
    End If

    Return New Uri(str_FtpAddress)

End Function

參考資料