728x90
반응형
728x170
■ 다양한 URL 인코딩을 사용하는 방법을 보여준다.
▶ Program.cs
using System.Text;
using System.Web;
namespace TestProject;
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 문자 테이블 출력하기 - DisplayCharacterTable(sourceArray, columnDictionary)
/// <summary>
/// 문자 테이블 출력하기
/// </summary>
/// <param name="sourceArray">소스 배열</param>
/// <param name="columnDictionary">컬럼 딕셔너리</param>
private static void DisplayCharacterTable(string[] sourceArray, Dictionary<string, Func<string, string>> columnDictionary)
{
foreach(string key in columnDictionary.Keys)
{
Console.Write(key.Replace(" ", "[space]") + " ");
}
Console.WriteLine();
foreach(string source in sourceArray)
{
foreach(string columnHeader in columnDictionary.Keys)
{
int columnWidth = columnHeader.Length + 1;
Func<string, string> columnFunction = columnDictionary[columnHeader];
string target = columnFunction(source);
// 가정 : 컬럼 헤더는 항상 인코딩된 문자열보다 넓다.
Console.Write(target.Replace(" ", "[space]").PadRight(columnWidth));
}
Console.WriteLine();
}
}
#endregion
#region 문자 테이블 출력하기 - DisplayCharacterTable()
/// <summary>
/// 문자 테이블 출력하기
/// </summary>
private static void DisplayCharacterTable()
{
string sourceString = "ABCD" + "abcd" + "0123" + " !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~" + "ĀāĒēĪīŌōŪū";
// 비 ASCII 문자를 올바르게 표시하려면 콘솔 인코딩을 설정해야 한다(예: ĀāĒē...와 같은 라틴 A 확장 문자).
Console.OutputEncoding = Encoding.UTF8;
// 또한 콘솔 글꼴(콘솔 속성 대화 상자에서)을 확장된 문자 집합을 올바르게 표시하는 글꼴로 설정해야 한다.
// 다음 글꼴은 모두 확장 문자를 올바르게 표시한다.
// Consolas
// DejaVu Sana Mono
// Lucida Console
// 또한 콘솔 속성에서 화면 버퍼 크기 및 창 크기 너비 속성을 최소 140자로 설정하여 생성된 테이블의 전체 너비를 표시한다.
Dictionary<string, Func<string, string>> columnDictionary = new Dictionary<string, Func<string, string>>();
columnDictionary.Add("Unencoded" , source => source );
columnDictionary.Add("UrlEncoded" , source => HttpUtility.UrlEncode(source) );
columnDictionary.Add("UrlEncodedUnicode" , source => HttpUtility.UrlEncodeUnicode(source) );
columnDictionary.Add("UrlPathEncoded" , source => HttpUtility.UrlPathEncode(source) );
columnDictionary.Add("EscapedDataString" , source => Uri.EscapeDataString(source) );
columnDictionary.Add("EscapedUriString" , source => Uri.EscapeUriString(source) );
columnDictionary.Add("HtmlEncoded" , source => HttpUtility.HtmlEncode(source) );
columnDictionary.Add("HtmlAttributeEncoded", source => HttpUtility.HtmlAttributeEncode(source));
columnDictionary.Add
(
"HexEscaped",
source =>
{
// Uri.HexEscape는 처음 255자만 처리할 수 있으므로 A와 같은 라틴 A 확장 문자의 경우 ArgumentOutOfRange 예외가 발생한다.
try
{
return Uri.HexEscape(source.ToCharArray()[0]);
}
catch
{
return "[OoR]";
}
}
);
char[] sourceCharacterArray = sourceString.ToCharArray();
string[] sourceStringArray = Array.ConvertAll<char, string>(sourceCharacterArray, character => character.ToString());
DisplayCharacterTable(sourceStringArray, columnDictionary);
}
#endregion
#region 프로그램 시작하기 - Mani()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
DisplayCharacterTable();
}
#endregion
}
728x90
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON/.NET6] Exception 클래스 : 전체 예외 메시지 구하기 (0) | 2022.10.02 |
---|---|
[C#/COMMON/.NET6] Exception 클래스 : 모든 예외 열거 가능형 구하기 (0) | 2022.10.02 |
[C#/COMMON/.NET6] Exception 클래스 : InnerException/Message 속성을 사용해 전체 예외 메시지 구하기 (0) | 2022.10.02 |
[C#/COMMON/.NET6] Exception 클래스 : GetBaseException 메소드를 사용해 최초 내부 예외 구하기 (0) | 2022.10.02 |
[C#/COMMON/.NET6] Exception 클래스 : InnerException 속성을 사용해 최초 내부 예외 구하기 (0) | 2022.10.02 |
[C#/COMMON/.NET6] dynamic 타입 객체의 속성 포함 여부 구하기 (0) | 2022.10.02 |
[C#/COMMON/.NET6] dynamic 타입 객체의 속성 포함 여부 구하기 (0) | 2022.10.02 |
[C#/COMMON/.NET6] BinaryWriter 클래스 : Write 메소드를 사용해 바이트 배열을 스트림에 쓰기 (0) | 2022.10.01 |
[C#/COMMON/.NET6] Environment 클래스 : GetEnvironmentVariable 정적 메소드를 사용해 사용자 임시 디렉토리 경로 구하기 (0) | 2022.10.01 |
[C#/COMMON/.NET6] Path 클래스 : GetTempPath 정적 메소드를 사용해 사용자 임시 디렉토리 경로 구하기 (0) | 2022.10.01 |
댓글을 달아 주세요