본문 바로가기
C++ 200제/코딩 IT 정보

C# URI Anchor 예약어 # 및 Url Encode 사이트

by vicddory 2019. 8. 9.

구체적인 예를 들어 말씀드리면 이렇습니다. C# URI 사용할 때, 파일 이름에 # 이 들어가 있으면 오류가 발생합니다. 프로그램 오류가 아니라, 개발자가 원하는 결과가 나오질 않아요.


왜냐면 C# URI, GetRequest() 에서 특수문자 #은 anchor 예약어 입니다. 그래서 파일 이름에 #을 제거하는 것이 가장 좋은데, 그게 어렵다면, Url Encode 해줘야 합니다.


우선 C# System.Net.FtpWebRequest 및 GetRequest 활용한 예제 살펴볼게요. 20번 라인 URI에서 의도치 않은 결과가 발생합니다. 파일 이름에 #이 들어감으로 인하여 1#.txt, 123#.txt 등 # 뒤의 문자를 인식하지 못합니다.


그래서, 엉뚱한 이름의 파일 이름이 생성되거나, 파일 자체를 만들지 못하는 문제가 생깁니다. Anchor에 영향을 주는 겁니다.


▷ FTP 업로드 예제 소스 (정상)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public bool Upload(FileInfo fi, string targetFilename)
{
    string target;
 
    if (targetFilename.Trim() == "")
    {
        target = this.CurrentDirectory + fi.Name;
    }
    else if (targetFilename.Contains("/"))
    {
        target = AdjustDir(targetFilename);
    }
    else
    {
        target = CurrentDirectory + targetFilename;
    }
 
    string URI = Hostname + target;
 
    System.Net.FtpWebRequest ftp = GetRequest(URI);
    ftp.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
    ftp.UseBinary = true;
    ftp.UsePassive = true;
    ftp.ContentLength = fi.Length;
 
    const int BufferSize = 2048;
    byte[] content = new byte[BufferSize - 1 + 1];
    int dataRead;
 
    using (FileStream fs = fi.OpenRead())
    {
        try
        {
            using (Stream rs = ftp.GetRequestStream())
            {
                do
                {
                    dataRead = fs.Read(content, 0, BufferSize);
                    rs.Write(content, 0, dataRead);
                } while (!(dataRead < BufferSize));<br />         rs.Close();
            }
        }
        catch (Exception)
        {
        }
        finally
        {
            fs.Close();
        }
    }
    ftp = null;
    return true;
 
}
cs



위 소스는 정상이지만, 파일 이름에 anchor 예약어 #이 들어가면 의도치 않은 결과가 발생합니다. 이때 해결 방법은 2가지입니다.


  1. 파일 이름에서 # 문자를 제거한다
  2. Url Encode로 얻은 값을 전달한다


1번은 생략하고, 2번 해결 방법 알려드릴게요.



위 사이트로 이동해 특수문자 # 이 어떻게 변하는지 살펴보세요.


C# URI Anchor 예약어 # 및 Url Encode 사이트[C# URI Anchor 예약어 # 및 Url Encode 사이트]


빨간색 박스 안에 있는 문자처럼 # 특수문자가 %23으로 바뀐 것이 확인되네요.


이런식으로 C# URI Anchor 에서 사용하는 특수문자 처리할 수 있습니다. 뭐, 기본적으로 파일 이름에 특수 문자 안 쓰는 게 제일 좋지만, 이런 식으로도 해결할 수 있습니다.



관련 글


[코딩지식] 특수문자, 특수기호 영어로 읽기 (영문 이름)

C# HttpWebRequest, HttpWebResponse 삭제된 블로그 URL 찾기

C# URL 웹페이지 존재 확인 (WebBrowser.Url - HTML)



ⓒ written by vicddory