숫자 간격 해결(전각 및 반각 문자)
숫자를 입력할 때 숫자 사이에 공백이 많이 있는 것처럼 보일 때가 있습니다.
“실수로 공백을 입력했습니까?” 그리고 간격 사이를 클릭해도 별도의 공간이 보이지 않습니다.
어떻게이 일이 일어 났어요? 이를 해결하기 위해 전각과 반각 문자를 배워봅시다.
글자를 배열하는 과정에 따라 전각과 반각으로 나눌 수 있다.
한글은 모두 전각에 속하며, 숫자와 영문은 각각 전각과 반각으로 나눌 수 있다.
Windows에서 전체 너비 또는 절반 너비를 설정하는 키보드 단축키는 Alt를 누른 다음 Equal을 누르는 것입니다.
(단축키: Alt + =) 반각에서 전각으로 또는 그 반대로 복원하려면 바로 가기를 다시 누르십시오.
코드 페이지 949 인코딩을 기반으로 반각 문자는 1바이트를 차지하고 전각 문자는 2바이트를 차지합니다.
위의 이미지를 보면 반각 “12” 문자와 전각 “1” 문자의 길이가 비슷한 것을 알 수 있습니다.
다음은 여러 인코딩에 대한 전각 문자와 반각 문자의 길이 차이를 비교한 것입니다.
도움이 될 수 있습니다.
public void BeomSang()
{
string 반각숫자 = "12345";
string 전각숫자 = "12345";
string 반각한글 = "가나다";
string 전각한글 = "가나다";
string 반각영문 = "abc";
string 전각영문 = "abc";
string(,) arr = { { "(반각) 숫자", 반각숫자 },
{ "(전각) 숫자", 전각숫자 },
{ "(반각) 한글", 반각한글 },
{ "(전각) 한글", 전각한글 },
{ "(반각) 영문", 반각영문 },
{ "(전각) 영문", 전각영문 } };
for (int i = 0; i < arr.GetLength(0); i++)
{
Debug.WriteLine($"{arr(i, 0)} \"{arr(i, 1)}\".Length = {arr(i, 1).Length}");
Debug.WriteLine($"{arr(i, 0)} \"{arr(i, 1)}\".Default.Length = {Encoding.Default.GetBytes(arr(i, 1)).Length}");
Debug.WriteLine($"{arr(i, 0)} \"{arr(i, 1)}\".ASCII.Length = {Encoding.ASCII.GetBytes(arr(i, 1)).Length}");
Debug.WriteLine($"{arr(i, 0)} \"{arr(i, 1)}\".UTF8.Length = {Encoding.UTF8.GetBytes(arr(i, 1)).Length}");
Debug.WriteLine($"{arr(i, 0)} \"{arr(i, 1)}\".UTF7.Length = {Encoding.UTF7.GetBytes(arr(i, 1)).Length}");
Debug.WriteLine($"{arr(i, 0)} \"{arr(i, 1)}\".UTF32.Length = {Encoding.UTF32.GetBytes(arr(i, 1)).Length}");
Debug.WriteLine($"{arr(i, 0)} \"{arr(i, 1)}\".Unicode.Length = {Encoding.Unicode.GetBytes(arr(i, 1)).Length}");
Debug.WriteLine($"{arr(i, 0)} \"{arr(i, 1)}\".BigEndianUnicode.Length = {Encoding.BigEndianUnicode.GetBytes(arr(i, 1)).Length}");
}
}
예제 소스의 결과는 다음과 같습니다.
- 단순히 문자의 길이만 비교하면 반각과 전각은 같은 길이입니다.
- CP949 기본 인코딩은 한글 2바이트, 반자 1바이트, 정수 및 영문 2바이트입니다.
한글은 전각과 반각을 구분하지 않기 때문에 바이트 길이는 같습니다. - 단순 문자열 길이 비교와 ASCII 인코딩 길이 비교는 같은 값을 가집니다.
- UTF8 인코딩에서 전각 문자는 3바이트이고 반각 문자는 1바이트입니다.
한글은 전각 문자이므로 3바이트입니다. - 유니코드 인코딩은 전각 및 반각 문자에 대해 각각 2바이트입니다.
(반각) 숫자 "12345".Length = 5
(반각) 숫자 "12345".Default.Length = 5
(반각) 숫자 "12345".ASCII.Length = 5
(반각) 숫자 "12345".UTF8.Length = 5
(반각) 숫자 "12345".UTF7.Length = 5
(반각) 숫자 "12345".UTF32.Length = 20
(반각) 숫자 "12345".Unicode.Length = 10
(반각) 숫자 "12345".BigEndianUnicode.Length = 10
(전각) 숫자 "12345".Length = 5
(전각) 숫자 "12345".Default.Length = 10
(전각) 숫자 "12345".ASCII.Length = 5
(전각) 숫자 "12345".UTF8.Length = 15
(전각) 숫자 "12345".UTF7.Length = 16
(전각) 숫자 "12345".UTF32.Length = 20
(전각) 숫자 "12345".Unicode.Length = 10
(전각) 숫자 "12345".BigEndianUnicode.Length = 10
(반각) 한글 "가나다".Length = 3
(반각) 한글 "가나다".Default.Length = 6
(반각) 한글 "가나다".ASCII.Length = 3
(반각) 한글 "가나다".UTF8.Length = 9
(반각) 한글 "가나다".UTF7.Length = 10
(반각) 한글 "가나다".UTF32.Length = 12
(반각) 한글 "가나다".Unicode.Length = 6
(반각) 한글 "가나다".BigEndianUnicode.Length = 6
(전각) 한글 "가나다".Length = 3
(전각) 한글 "가나다".Default.Length = 6
(전각) 한글 "가나다".ASCII.Length = 3
(전각) 한글 "가나다".UTF8.Length = 9
(전각) 한글 "가나다".UTF7.Length = 10
(전각) 한글 "가나다".UTF32.Length = 12
(전각) 한글 "가나다".Unicode.Length = 6
(전각) 한글 "가나다".BigEndianUnicode.Length = 6
(반각) 영문 "abc".Length = 3
(반각) 영문 "abc".Default.Length = 3
(반각) 영문 "abc".ASCII.Length = 3
(반각) 영문 "abc".UTF8.Length = 3
(반각) 영문 "abc".UTF7.Length = 3
(반각) 영문 "abc".UTF32.Length = 12
(반각) 영문 "abc".Unicode.Length = 6
(반각) 영문 "abc".BigEndianUnicode.Length = 6
(전각) 영문 "abc".Length = 3
(전각) 영문 "abc".Default.Length = 6
(전각) 영문 "abc".ASCII.Length = 3
(전각) 영문 "abc".UTF8.Length = 9
(전각) 영문 "abc".UTF7.Length = 10
(전각) 영문 "abc".UTF32.Length = 12
(전각) 영문 "abc".Unicode.Length = 6
(전각) 영문 "abc".BigEndianUnicode.Length = 6