본문 바로가기

.NET/C#

한자 등록시 ? 표시 해결하기

디비 스키마가 nvarchar가 아닌 varchar로 되어있을 경우


부득히가하게 스키마 변경이 불가능하다면


아래의 코드로 ?로 입력되는 문자를 unicode로 치환하면


된다. 우리 시스템이 그런 상황이라 한번 만들어 봤다.


아래의 메서드를 적용해 보길바란다.


public string GetUnicodeString(string input)

    {

        Encoding encoding = Encoding.GetEncoding(51949);//중국어 간체

        var bytest = encoding.GetBytes(input);

        var output = encoding.GetString(bytest);

        Console.WriteLine(input);

        Console.WriteLine(output);

        List<string> unicodes = new List<string>();

        string result = String.Empty;

        if (input != output)

        {

            for (int i = 0; i < input.Length; i += char.IsSurrogatePair(input, i) ? 2 : 1)

            {

                int codepoint = char.ConvertToUtf32(input, i);

                unicodes.Add(String.Format("&#{0}", codepoint));

            }


            for (int i = 0; i < input.Length; i++)

            {

                if (input[i].ToString() != output[i].ToString())

                {

                    result += unicodes[i];

                }

                else

                {

                    result += input[i];

                }

            }

        }

        else result = input;

        return result;

    }