'unicode'에 해당되는 글 2건

  1. 2011.09.23 SQLite 에서 Unicode 지원하기
  2. 2011.01.27 UNICODE, ANSI 인코딩 변환
컴퓨터/프로그래밍2011. 9. 23. 18:41


예전에 빠르고 가벼운 DB 를 찾다가 메모리 DB 도 만들 수 있는 SQLite 를 접하게 되었습니다. 하지만 영어권에서 만들어서 인지 UTF-8 방식으로 처리되어 불편한 점이 한두가지가 아니었습니다. 그래서 쉽게 사용하지 못하고 한동안 잊고 지냈습니다.

그리고 요즘들어서 다시 필요하게 되어 찾아봤지만 여전히 Unicode 사용이 너무 불편하고 제대로 안되서 고민하다가 해결 방법을 찾게되어 올려봅니다.

함수 하나를 추가하는 것으로 해결 가능한데 아래의 링크에서 SQLite 를 수정하는 방법을 찾을 수 있습니다.

http://greenfishblog.tistory.com/78

아래의 압축 파일은 위의 링크를 참조하여 수정한 것으로 SQLite 3.7.8 버전에 최소한의 코드만 수정했습니다. Unicode 를 사용하는 함수의 인자나 반환값을 wchar_t 형으로 수정했으며 DLL 에서도 사용 가능하도록 수정했습니다.

그리고 SQLITE_OMIT_DEPRECATED 전처리기를 정의하여 SQLite 에서 사용을 제한하는 함수들은 제외시켰습니다.

컴파일 환경은 Visual C++ 9.064비트 이며 DLL(동적 링크 라이브러리)LIB(정적 라이브러리) 로 컴파일 가능하도록 VC프로젝트 파일을 별도로 나누었습니다.


Posted by jungtae17
컴퓨터/프로그래밍2011. 1. 27. 18:58
UNICODE 와 ANSI 문자열 사이에서 변환이 쉽지 않다.

C/C++ 에서는 간단한 함수를 제공하고 있어서 소개한다.
// STEP 0: 로케일 설정 (시스템의 기본 언어로 설정)
setlocale( LC_ALL, "" );

// STEP 1: 문자 변환
//   	STEP 1-1 ANSI ==> UNICODE
mbtowc( UNICODE 문자, ANSI 문자 );
//   	STEP 1-2: UNICODE ==> ANSI
wctomb( ANSI 문자, UNICODE 문자 );

// STEP 2: 문자열 변환
//	STEP 2-1: ANSI ==> UNICODE
mbstowcs( UNICODE 문자열, ANSI 문자열, UNICODE 문자열 최대길이 );
// 	STEP 2-2: UNICODE ==> ANSI
wcstombs( ANSI 문자열, UNICODE 문자열, ANSI 문자열 최대길이 );

UNICODE 사용 시 유용한 매크로

  • _countof() 매크로 : 문자 배열의 크기(문자 개수)
  • sizeof 연산자 : 문자배열의 Byte 수

Posted by jungtae17