C#의 URL 인코딩

Bilal Shahid 2023년10월12일
  1. 단순 ASCII를 사용하여 C#의 문자 인코딩
  2. C#의 다양한 URL 인코딩 옵션
  3. C#System.Web에 있는 다른 인코딩 기능
  4. Uri.HexEscape()를 사용하여 C#에서 문자열의 단일 문자 수정
  5. C#에서 Temboo를 사용하여 URL 인코딩
  6. 결론
C#의 URL 인코딩

이 문서에서는 C#에서 URL을 인코딩하는 방법에 대해 설명합니다.

단순 ASCII를 사용하여 C#의 문자 인코딩

키보드에서 각 문자의 DECIMAL 값을 나타냅니다. 따라서 이 DECIMAL 값을 문자열의 문자 중 하나로 대체한 다음 효율적으로 인코딩할 수 있습니다.

using System;

class Program {
  static void Main(string[] args) {
    string s = "DelftStack";
    string ascii_convert = "";
    foreach (char c in s) {
      ascii_convert += System.Convert.ToInt32(c);
    }
    Console.WriteLine("The converted ascii string is: " + ascii_convert);
  }
}

System.Convert.ToInt32()는 문자열에서 문자의 DECIMAL 표현을 나타내는 경향이 있습니다. 문자가 변환되면 해당 값이 이제 인코딩된 문자열을 나타내는 새 문자열 ASCII_CONVERT에 추가됩니다.

DECIMAL을 사용하는 대신 인코딩 요구 사항에 따라 BINARY, OCTAL 또는 HEXADECIMAL 변환을 선택할 수도 있습니다.

C#의 다양한 URL 인코딩 옵션

C#에는 다양한 인코딩 함수를 사용할 수 있습니다. 많은 사람들이 URL, URI, HEX 등과 같은 다른 표기법으로 문자를 변환합니다.

앞으로 나아가 간단한 URL을 이러한 다양한 표기법으로 변환하는 함수를 작성해 보겠습니다.

먼저 System.Web 네임스페이스를 코드 파일에 추가합니다. 그런 다음 함수를 호출하여 문자열을 URL 형식으로 인코딩하여 문자열의 /, ., "ASCII(16진수) 표현으로 변환합니다.

using System;
using System.Web;

class Program {
  static void Main(string[] args) {
    Console.WriteLine(HttpUtility.UrlEncode("https://www.google.com"));
  }
}

출력:

https%3a%2f%2fwww.google.com

이러한 표현은 다른 시스템에서 인식하는 데 문제를 일으키는 경우가 많습니다. 그다지 중요하지 않은 정보만 인코딩하도록 하는 것이 좋습니다.

위의 예에서 우리는 항상 Google에 액세스할 수 있기를 원합니다. 그러나 다른 형식으로 표현하면 무효화되고 인식할 수 없게 될 수 있습니다.

따라서 URL에 속하지만 사용자별로 다른 용어로 인코딩을 호출해야 합니다. 이제 Google에서 "세계"를 검색한다고 가정해 보겠습니다.

URL은 다음과 같습니다.

https://www.google.com/search?q=World

여기서 q는 쿼리를 나타냅니다. 다음 코드를 사용하여 인코딩하십시오.

예제 코드:

using System;
using System.Web;

class Program {
  static void Main(string[] args) {
    Console.WriteLine("https://www.google.com/search" + HttpUtility.UrlEncode("?q=World"));
  }
}

출력:

https://www.google.com/search%3fq%3dWorld

C#System.Web에 있는 다른 인코딩 기능

예제 코드:

using System;
using System.Web;

class Program {
  static void Main(string[] args) {
    Console.WriteLine("URL ENCODE UNICODE: " +
                      HttpUtility.UrlEncodeUnicode("https://www.google.com/search?q=World"));
    Console.WriteLine("URL PATH ENCODE: " +
                      HttpUtility.UrlPathEncode("https://www.google.com/search?q=World"));
    Console.WriteLine("URI ESCAPE DATASTRING: " +
                      Uri.EscapeDataString("https://www.google.com/search?q=World"));
    Console.WriteLine("URL ESCAPE URI STRING: " +
                      Uri.EscapeUriString("https://www.google.com/search?q=World"));
    Console.WriteLine("HTML ENCODE: " +
                      HttpUtility.HtmlEncode("https://www.google.com/search?q=World"));
    Console.WriteLine("HTML ATTRIBUTE ENCODE: " +
                      HttpUtility.HtmlAttributeEncode("https://www.google.com/search?q=World"));
  }
}

출력:

URL ENCODE UNICODE: https%3a%2f%2fwww.google.com%2fsearch%3fq%3dWorld
URL PATH ENCODE: https://www.google.com/search?q=World
URI ESCAPE DATASTRING: https%3A%2F%2Fwww.google.com%2Fsearch%3Fq%3DWorld
URL ESCAPE URI STRING: https://www.google.com/search?q=World
HTML ENCODE: https://www.google.com/search?q=World
HTML ATTRIBUTE ENCODE: https://www.google.com/search?q=World

HttpUtility.UrlPathEncode(), Uri.EscapeUriString(), HttpUtility.HtmlEncode()HttpUtility.HtmlAttributeEncode()는 인코딩되지 않은 문자열과 동일한 결과를 나타내는 경향이 있습니다.

Uri.HexEscape()를 사용하여 C#에서 문자열의 단일 문자 수정

C#에서 URL 문자열의 문자를 임의로 수정한 다음 인코딩된 문자열을 반환하는 함수를 만들어 보겠습니다.

static string encoded_url(string param) {
  Random rd = new Random();
  int rand_num = rd.Next(0, param.Length - 1);
  param = param.Remove(rand_num, 1);
  param = param.Insert(rand_num, Uri.HexEscape(param[rand_num]));

  return param;
}

다음과 같이 메인에서 호출합니다.

Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 1: " +
                  encoded_url("https://www.google.com/search?q=World"));
Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 2: " +
                  encoded_url("https://www.google.com/search?q=World"));
Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 3: " +
                  encoded_url("https://www.google.com/search?q=World"));

완전한 소스 코드:

using System;
using System.Web;

class Program {
  static string encoded_url(string param) {
    Random rd = new Random();
    int rand_num = rd.Next(0, param.Length - 1);
    param = param.Remove(rand_num, 1);  /// returning the
    param = param.Insert(rand_num, Uri.HexEscape(param[rand_num]));

    return param;
  }

  static void Main(string[] args) {
    // string s = Console.ReadLine();
    // string ascii_convert = "";
    // foreach (char c in s)
    //{
    //     ascii_convert += System.Convert.ToInt32(c);
    // }
    // Console.WriteLine("The converted ascii string is: " + ascii_convert);
    // Console.ReadKey();

    Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 1: " +
                      encoded_url("https://www.google.com/search?q=World"));
    Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 2: " +
                      encoded_url("https://www.google.com/search?q=World"));
    Console.WriteLine("URI HEX ESCAPE for 'GOOGLE', called at 3: " +
                      encoded_url("https://www.google.com/search?q=World"));
  }
}

출력:

URI HEX ESCAPE for 'GOOGLE', called at 1: https://www.%6Foogle.com/search?q=World
URI HEX ESCAPE for 'GOOGLE', called at 2: https://www.go%67gle.com/search?q=World
URI HEX ESCAPE for 'GOOGLE', called at 3: https://www.google%63com/search?q=World

임의의 위치에서 문자가 어떻게 HEX 표현으로 변환되는지 확인하십시오. 루프에서 이 URI.HexEscape() 함수를 사용하여 전체 문자열 또는 원하는 문자를 수정할 수도 있습니다.

URLENCODE는 브라우저 호환성 및 사용에 가장 적합합니다. 또한 URIHTTPUTILITY의 사용을 명확히 하기 위해 URI는 이미 클라이언트 C# 코드에 있는 SYSTEM 클래스에서 상속된다는 점을 기억하십시오.

SYSTEM.WEB을 사용하지 않는 경우 URI를 사용한 다음 인코딩 기능을 호출하는 것이 좋습니다.

그러나 SYSTEM.WEB을 네임스페이스로 사용하는 것은 많은 경우에 문제가 되지 않습니다. 프로젝트가 .NET FRAMEWORK CLIENT PROFILE에서 컴파일된 경우 코드 파일을 새 프로젝트에 복사하는 것 외에는 할 수 있는 일이 많지 않습니다.

.NET FRAMEWORK CLIENT PROFILESYSTEM.WEB. SYSTEM.WEB의 네이밍은 Simple .NET FRAMEWORK 4를 활용해야 합니다.

C#에서 Temboo를 사용하여 URL 인코딩

TEMBOO라는 API는 URL을 완벽하게 인코딩하는 경향이 있습니다.

예제 코드:

// the NAMESPACES TO USE BEFORE UTILIZING THEIR CODE
using Temboo.Core;
using Temboo.Library.Utilities.Encoding;

TembooSession session = new TembooSession("ACCOUNT_NAME", "APP_NAME", "APP_KEY");

URLEncode urlEncodeChoreo = new URLEncode(session);

urlEncodeChoreo.setText("https://www.google.com/search?q=");

URLEncodeResultSet urlEncodeResults = urlEncodeChoreo.execute();

Console.WriteLine(urlEncodeResults.URLEncodedText);

결론

인코딩하는 동안 변환될 불법 문자가 있는지 확인하십시오. 그렇지 않은 경우 첫 번째 솔루션으로 전환하고 SWITCH 사례를 사용하여 인코딩할 부분과 인코딩하지 않을 부분을 결정하는 혼합 함수를 만듭니다.

결국 인코딩은 사용자의 몫입니다. 잘못된 문자와 ASCII를 전환할 수 있는 함수는 반대쪽에 유사한 디코더가 필요합니다.

따라서 URL/문자열에 대한 전역 인코더/디코더가 있는 시스템에서 사용하는 것이 가장 좋습니다.

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub