첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

■ 다양한 URL 인코딩을 사용하는 방법을 보여준다.

TestProject.zip
0.00MB

▶ 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
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요