상황 : 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
Posted by freezn