---
# System prepended metadata

title: '[VB.NET] FtpWebRequest處理檔案名稱特殊符號'
tags: [dotblogs存檔, Visual Basic]

---

# [VB.NET] FtpWebRequest處理檔案名稱特殊符號
###### 發布日期：2020-09-14 | 存檔日期：2023-06-18
###### 原文網址：https://dotblogs.com.tw/terry_324/2020/09/14/152957

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

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

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

```vb=
'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
```

## 參考資料
* [c# 进行ftp操作时，遇到‘#’特殊字符处理](https://blog.csdn.net/ychxiaoyixiao/article/details/46237875)
* [上傳檔案至 IIS 的檔案名稱有三個字元最好禁止使用: % # +](https://blog.miniasp.com/post/2011/07/08/Avoid-some-Bad-Characters-to-Use-in-Web-based-Filenames)

###### tags: `Visual Basic` `dotblogs存檔` `Public`