UTF-8 환경 표준 입력시 한글 백스페이스 처리?
이 글에서는 표준 입력을 line buffer 모드로 사용하는 것을 가정하겠습니다. (그게 기본 설정이기도 하죠.)
예를 들면 리눅스에서 bash상에서는 한글로 치다가 백스페이스로 지우면 실제로 버퍼에서도 한글 글자 하나가 통째로 지워지고 실제로 화면에서도 그렇게 보입니다.
그런데, 예를 들면 C++ 프로그램에서 std::cin 으로 한 줄 입력을 받는 중에 백스페이스로 지우면 버퍼에서는 한글 글자 하나가 통째로 지워지는데 화면에서는 글자가 반만 지워진 것으로 보여서 백스페이스를 두 번 눌러서 화면에 나타난 글자를 지우면 실제 버퍼에서는 내부적으로 두 글자가 지워져서 나옵니다.
(C++ 말고 다른 프로그래밍 언어에서 표준 입출력을 사용해도 마찬가지였습니다. 뭐 표준 입출력이 glibc 바인딩을 사용할 테니 당연한 거겠지만 ...)
bash라던가 파이썬 등 인터프리터 환경(인터프리터 환경에서는 제대로 되지만 sys.stdin.readline() 표준 입출력 함수로 문자열 입력을 받을 땐 같은 문제 발생)에서는 이걸 제대로 처리하는 걸 보면 뭔가 이걸 처리해 주는 라이브러리나 그런 게 있을텐데, 어떤 방법을 써야 하나요?
아직까지도 국제화를 충실히 지원하는 디지털 환경은 갈 길이 머네요. 이렇게 기본적이고 사소하고 당연히 되어야 할 것들도 아직 기본적인 라이브러리 기본 설정에서 제대로 동작하지 않고 따로 방법을 찾아야 하니 ...
@ 참고로 제가 사용하는 리눅스 환경은 다음과 같습니다.
$ uname -a
Linux kyavaio 2.6.29-2-686 #1 SMP Sun May 17 17:56:29 UTC 2009 i686 GNU/Linux
$ set|grep ^LANG
LANG=ko_KR.UTF-8
readline 라이브러리를
readline 라이브러리를 사용하면 된다는 건 압니다만, GPL을 사용할 생각이 아니라거나, 아니면 readline의 히스토리 기능이 필요한 게 아니라 그냥 백스페이스만 제대로 먹으면 되는 건데 굳이 readline에 의존하기 싫다면 다른 방법이 없는지 궁금합니다.
[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin
잘은
잘은 모르지만,
readline 과 같은 기능을 하는 libedit 라는 것이 있습니다.
bsd 네요.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/
https://xenosi.de/
libedit는 제가 원하는
libedit는 제가 원하는 것과 반대쪽 그러니까 readline의 히스토리 기능만 있는 GPL이 아닌 간단한 readline인데, 문제는 제가 알기로 아직 libedit는 멀티바이트 문자를 전혀 지원하지 않는 것으로 알고 있습니다. 하스켈 컴파일러인 GHC가 라이센스 문제 때문에 readline에서 libedit로 전환한 다음에 한글이 ghci 프롬프트에서 바로 저 문제가 발생하게 되었기 때문에 좀 짜증이 나는 관계로 알고 있죠 -_-;;;
[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin
libedit 가 2006년도
libedit 가 2006년도 이후로 업데이트도 없군요.-_-;
php 에 붙일 수 있길래 간단히 테스트 해 봤더니, '테스트'라는 글을 입력하는 것 조차 안되네요.
'스' 를 치는 순간 화면이 클리어 되어 버립니다.-_-;;;;;;
readline 은 아주 깔끔하군요.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/
https://xenosi.de/
댓글 달기