컴퓨터/c#

C# 한자, 일본어 확인 및 변환 등 (비정규식)

k1asd1 2021. 5. 20. 17:25
728x90
반응형

한자, 한문, 일본어 등이 포함된 문자열을 처리하고 싶을 때 사용 가능합니다.

 

사이트에는 16진수로 되어 있으나 전 10진수로 바꿔서 사용했습니다.


* 전체 유니코드 영역 목록

https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%EC%98%81%EC%97%AD

 

유니코드 영역 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 유니코드에는 연속된 코드 포인트의 집합인 영역(block, 블록)들이 있다. 각 영역의 이름은 유일하며, 그 범위는 다른 영역과 겹치지 않는다. 영역의 크기는 16의

ko.wikipedia.org


* 코드

* 참조 관리자 -> COM -> 'Hanja Dictionary Type Library 1.0' 추가

ushort usr;
string str = "近者說遠者來";

MSHJDICLib.HanjaDic hjd = new MSHJDICLib.HanjaDic();
hjd.OpenMainDic();

for (int j = 0; j < str.Length; j++)
{
    us = isCheck(str.Substring(j, 1));

    if (usr != 0)
    {
        str = str.Replace(str.Substring(j, 1), " ");
    }
}

private ushort isCheck(string str)
{
    ushort usr = BitConverter.ToUInt16(Encoding.Unicode.GetBytes(str), 0);
            
    //한자, 일본어 유니코드 범위
    //16진수 -> 10진수로 변환 후 사용
    if ((us >= 13312 && us <= 19903) || //한중일 통합 한자 확장 A
        (us >= 19968 && us <= 40895) || //한중일 통합 한자
        (us >= 63744 && us <= 64255) || //한중일 호환용 한자
        (us >= 12352 && us <= 12447) || //히라가나
        (us >= 12448 && us <= 12543)) //카타카나
    {
        return us;
    }
        else
    {
        return 0;
    }
}

 

- 해당 문자를 16비트로 바꾸어 범위 안에 포함되는지 확인하고 있으면 공백으로 처리하는 방식입니다.

예제는 크게 의미 없는 공백으로 처리하였으나 해당 문자를 위에서 선언된 HanjaDic에서 제공하는 메서드 중 GetHanjaSense(한자 뜻), HanjaToHangul(한자 음) 등으로 추가하여 사용할 수 있습니다.


위 사이트에서 원하는 범위를 확인하여 정규식으로 만들면 보다 간결하게 사용 가능할 듯합니다.

 

이상입니다.

728x90
반응형