반응형
VB에서는 lenb라는 함수를 이용하여 문자열의 길이를 bytes로 얻을 수 있었다.
그러나 .net으로 넘어오면서 모든 문자열을 unicode로 처리하게 되어 2bytes로 인지하게 되었고 따라서, lenb의 지원이 중단되었다.
이에 2bytes문자와 1byte의 문자를 구별하여 그 길이를 위해 여기저기 뒤져보고 이것저것 해보기도 하였지만, 나의 우매한 지식으로는 도저히 알아낼 수가 없었다.
딴에는 문자열을 bytes로 변환하면 그 값이 나오지 않을까 싶었는데, 아닌가보다. 기본적인 데이터에 대한 이해가 없는 상태에서는 쉽지 않았다.
그러다 devpia에서 우연히 아래의 게시물을 발견하여 그 해법을 찾았다.
(http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=44&MAEULNo=18&no=22085&ref=22085)
안녕하세요. .net은 기본적으로 모든 문자가 2byte입니다. unicode가 기본이기 때문이지요. 그래서, encoding을 한글로 변경후에 GetByteCount하면 영문과 한글의 byte수가 다르게 나옵니다.
Dim aaa As String = "aaa" Dim bbb As String = "질문" Dim ccc As String = "aa질문"
MessageBox.Show(System.Text.Encoding.GetEncoding("euc-kr").GetByteCount(aaa)) MessageBox.Show(System.Text.Encoding.GetEncoding("euc-kr").GetByteCount(bbb)) MessageBox.Show(System.Text.Encoding.GetEncoding("euc-kr").GetByteCount(ccc))
이렇게 하면 aaa는 3, bbb는 4, ccc는 6이 돼겠죠. 그럼. |
내가 사용하고자 했던 것은 긴 문자열이 아닌 관계로 실시간으로 바꾸어도 큰 문제가 없을 것으로 판단되었다.
따라서 textchanged 이벤트에서 바로바로 변경 bytes 크기를 알아내도록 하였고, 셀렉션이 있을 경우에는 그 크기를 알기 위해 mouseup / keyup 이벤트에도 다음 구문을 추가하였다.
If tbBizContent.SelectionLength > 0 Then
BizBytes.Text = "길이 : " & System.Text.Encoding.GetEncoding("euc-kr").GetByteCount(tbBizContent.SelectedText)
Else
BizBytes.Text = "길이 : " & System.Text.Encoding.GetEncoding("euc-kr").GetByteCount(tbBizContent.Text)
End If
BizBytes.Text = "길이 : " & System.Text.Encoding.GetEncoding("euc-kr").GetByteCount(tbBizContent.SelectedText)
Else
BizBytes.Text = "길이 : " & System.Text.Encoding.GetEncoding("euc-kr").GetByteCount(tbBizContent.Text)
End If
별거 아니지만 무척 만족스럽다.
반응형
'삶의 도움이 되도록 씨부리는거 > VB' 카테고리의 다른 글
VB로 웹 submit 처리 (0) | 2013.09.02 |
---|---|
VB.net에서 웹 컨트롤 로그인 방법..을 알고 싶습니다!! (0) | 2011.12.05 |