상황 : centos + mono + c# + postgresql
(postgresql 은 utf-8 로 db 및 테이블 생성했음)
euc-kr(cp949 ?) 데이터를 받을 일이 있어서 출력했는데 한글 부분 깨짐.
아마도 euc-kr 데이터라 유니코드 (혹은 utf-8)로 변환이 필요할 것으로 생각됨.
그래서 코드변환하게 C# 프로그램에서 조금 수정
기존 :
System.Text.Encoding.Default.GetString(bytes);
변경 :
System.Text.Encoding.GetEncoding(51949).GetString(bytes); // 51949 대신 "euc-kr" 을 써도 되는 듯
그랬더니 오류 발생
Unhandled Exception: System.NotSupportedException: CodePage 51949 not supported
뭥미? 싶어서 구글링해보니 우분투 포럼에 있다. (http://ubuntuforums.org/showthread.php?t=831409)
대충 정리하면 mono용 i18n 깔아라~
음... 난 centos 니까
yum search mono
쭉 훑어보니
mono-locale-extras.i386 : Extra locale information for Mono
요놈이구나 !
yum install mono-locale-extras
오류 안남.
끝.
이면 좋으련만 그래도 db에 저장하는 한글은 깨져있음.
접속하는데 사용한 라이브러리는 mono용 npgsql 인데, 혹시 커넥션 파라미터(dsn)에 인코딩 지정하는 것 있나??
찾아보니 있다. 기본이 유니코드일 줄 알았는데 아니다.
ASCII가 기본이란다. UTF-8 쓰는데 지장있으면 UNICODE 지정하란다. (http://www.mono-project.com/PostgreSQL)
C# 코드의 npgsql 커넥션파라미터에 다음을 추가
Encoding=UNICODE
깔꼼하게 해결 ~ 쿼리 툴 따로 쓰기 귀찮아서 깔아놓은 phpPgAdmin 에도 한글이 잘 나온다.
참고한 페이지 :
http://funnism.com/11
http://msdn.microsoft.com/ko-kr/library/system.text.encoding.aspx