안드로이드 개발 질문/답변
(글 수 40,700)
안녕하세요.
지금 SMS관련 App을 만들고 있습니다. 그런데 한글문자를 세는것이 해결이 안 되어서 혹시 이부분에 경험이 있으신 분들의
팁을 좀 ...
밑에 보니 관련 질문이 있는데 오래되어서 다시 끌어올리는 의미에서 질문을 다시 해 봅니다.
그분은 getBytes란 method를 썼는데 한글이 3bytes로 된다고 하더라구요. 저도 해보니 3bytes로 됩니다.
안드로이드의 다른 SMS프로그램을 써 보니 한글을 치는 순간 한 문자로 보낼 수 있는 바이트수를 70으로 바꾸더군요.
그리고 나선 한글을 그냥 한 바이트로 세더군요. 이렇게 되면 결국 한글과 영문이 혼재되어 있는 경우에도 70자밖에 쓸 수 없어
정확한 문자세기가 되지 않는 문제가 있습니다.
한글과 영문이 섞여 있어도 한글 한자는 2bytes로 영문은 1자로 셀 수 있는 방법이 있는지요.
그냥 무시하고 마켓에 올리자니 중요한 부분이 아닐까 싶어 해결하고 올리고 싶네요.
2010.01.15 15:16:41
단순히 세는것만 계산을 하셔서 디스플레이 하실꺼라면
한글이 3bytes 일때 2bytes로 임시적으로 계산하시면 안되나요?
영어는 1bytes로 고정이자나요. 문장전체의 바이트계산을 하시지마시고 한글자 입력시마다 byte를 받으셔서
임시로 선언한 변수값에 누적시키시고요. 단 3byte일때는 2byte로 변수에 누적...
... 아 생각해보니 이건 입력시만 이군요 -ㅅ-... 렝쓰로 계산해도 될것같은데..
한글이 3bytes 일때 2bytes로 임시적으로 계산하시면 안되나요?
영어는 1bytes로 고정이자나요. 문장전체의 바이트계산을 하시지마시고 한글자 입력시마다 byte를 받으셔서
임시로 선언한 변수값에 누적시키시고요. 단 3byte일때는 2byte로 변수에 누적...
... 아 생각해보니 이건 입력시만 이군요 -ㅅ-... 렝쓰로 계산해도 될것같은데..
2010.01.15 17:00:01
length로 하면 한글이 1로 계산되고 getBytes로 하면 3으로 되니 난감하군요.
볼레로님/ utf-8은 한글을 3 bytes로 하고 utf-16은 모든 문자를 2bytes로 한다네요. Unicode는 큰 개념이고 utf-8이나 utf-16모두 unicode에 해당하는 인코딩타입이라네요.
저도 지식이 짧아서 구글링을 좀 해보니 자바관련한 웹페이지에 그렇게 나오는군요.
2010.01.15 18:13:26
볼레로님의 댓글에 힌트를 얻어 encoding방식을 euc-kr로 바꾸어 문자를 세는 방식으로 해결하였습니다.
이렇게 하면 한글 한자는 2 bytes, 특수문자나 영문은 1 byte로 바뀌기 때문에 제가 원하는대로 되었습니다.
int length = text.getBytes("EUC-KR").length;
이런식입니다. 나중에 저같은 고민을 하실분이 있으실 것 같아 올려봅니다.
2010.01.15 22:00:54
Unicode는 세계 각국의 문자코드 이구요.
이것을 네트워크로 전송하려고 보니까, 상위비트가 설정되면 이전의 7bit 문자열을 지원하던 장치들과 문제를 일으켜서요.
네트워크상에서 전송으로 해도 괜찬도록 하기 위해서 나온것이
UTF 랍니다.
http://ko.wikipedia.org/wiki/UTF-8
FSS-UTF(File System Safe UCS/Unicode Transformation Format)
UTF (universal transformation format)
http://www.terms.co.kr/UTF.htm
--> 저도 unicode 로 알고 있었는데, terms에서는 universal 이라고 썼네요. unicode 가 맞을거 같은데.
UTF-8 은 8bit 가 기준 단위 이구요.
UTF-16은 16bir 가 기준 단위 랍니다.
어째든 둘다 unicode를 담기 위한 그릇정도로 보시면 됩니다.
참고로, UTF 에는 unicode 만 들어간답니다.
KS5601 완성형 한글은 UTF-8 인코딩만 해서 넣을 수는 없답니다 ^^
KS5601 --> Unicode --> UTF-8
이런식으로 넣어야 하지죠.
그래서, UTF 가 Unicode를 전송하기 위해서 나온 것이라고 볼 수도 있답니다.
이것을 네트워크로 전송하려고 보니까, 상위비트가 설정되면 이전의 7bit 문자열을 지원하던 장치들과 문제를 일으켜서요.
네트워크상에서 전송으로 해도 괜찬도록 하기 위해서 나온것이
UTF 랍니다.
http://ko.wikipedia.org/wiki/UTF-8
FSS-UTF(File System Safe UCS/Unicode Transformation Format)
UTF (universal transformation format)
http://www.terms.co.kr/UTF.htm
--> 저도 unicode 로 알고 있었는데, terms에서는 universal 이라고 썼네요. unicode 가 맞을거 같은데.
UTF-8 은 8bit 가 기준 단위 이구요.
UTF-16은 16bir 가 기준 단위 랍니다.
어째든 둘다 unicode를 담기 위한 그릇정도로 보시면 됩니다.
참고로, UTF 에는 unicode 만 들어간답니다.
KS5601 완성형 한글은 UTF-8 인코딩만 해서 넣을 수는 없답니다 ^^
KS5601 --> Unicode --> UTF-8
이런식으로 넣어야 하지죠.
그래서, UTF 가 Unicode를 전송하기 위해서 나온 것이라고 볼 수도 있답니다.
utf-8을 unicode로 바꾸어서 세면 안될까요?
이렇게 바꾸는 api 가 java 쪽에 없지는 않을 거 같은데요.