SQLite3 에 한글이름 데이터가 있는데 select 문으로 읽어서 화면상에 프린트하는데 한글이 않나옵니다.

2,502 views
Skip to first unread message

kim ks

unread,
Nov 8, 2015, 11:45:51 PM11/8/15
to 한국 루비 사용자 모임
sqlite_test.rb의 내용. 단지 SQLite3에서 tsg_table을 읽어서 화면상에 출력하는 간단한 내용입니다.

require 'sqlite3'

# Open a SQLite 3 database file
db = SQLite3::Database.open 'file.db'

# Find some records
db.execute 'SELECT * FROM tsg_table' do |row|
  p row
end

c:\Ruby21>Ruby sqlite-test.rb    실행을 할경우 영문은 문제없이 나오는데 한글은 아래와 같이 "직장" 이란 부분이 핵사 값으로 나옵니다.
["\xC1\xF7\xC0\xE5", "ITPro", "010-0520-7745", "02-2099-9889", ""]
["\xC1\xF7\xC0\xE5", "Partroom", "02-2009-9777", "", ""]

c:\Ruby21>
아래는 SQLite에서의 해당 테이블의 schema를 보여줍니다.
.schema tsg_table
CREATE TABLE tsg_table<
  "Group" TEXT, 
  "name" TEXT,
  "mobile" TEXT,
  "company" TEXT,
  "home" TEXT
>;
 

이지민

unread,
Nov 9, 2015, 1:50:46 AM11/9/15
to 한국 루비 사용자 모임
데이터베이스 인코딩 문제이거나 루비 인코딩 문제일 것 같아요


1. db 불러올때 인코딩이 뭔지 확인해볼것같아요.
irb로 아래처럼 쳐봐서 확인해봐요! 그다음 인코딩이 utf-8이 아니면, database의 인코딩을 설정하는걸 찾아보면 좋을듯요! 

$ irb
irb(main):001:0> require 'rubygems'
=> false
irb(main):002:0> require 'sqlite3'
=> true
irb(main):003:0> db = SQLite3::Database.open 'file.db'
=> #<SQLite3::Database:0x000001010323a0>
irb(main):006:0> val = db.execute('select * from tsg_table').first.first
=> "bar"
irb(main):007:0> val.encoding
=> #<Encoding:UTF-8>
(위의 코드가 맞는지는 저도 실행 안해봐서 모르겠어요! 아래의 구글그룹 내용을 참고했어요! 이런 st로 한번 찾아보면 좋을듯요!)

2. 
루비 버전 2.0 이하 버전이라면 루비 파일 최상단에 
# encoding: utf-8 
이걸 추가해볼것같아요! 


Jung man Bae

unread,
Nov 9, 2015, 2:05:26 AM11/9/15
to rub...@googlegroups.com
대부분 루비 사용자들이 리눅스나 맥 환경에서 사용하므로 답변이 별로 없으신 것 같네요.
윈도우 커맨드 환경의 기본 인코딩 값을 확인해보세요. ( 보통 기본이 EUC-KR입니다. - 코드페이지 949 라고 뜨네요. )

아래 링크 확인하시고 인코딩을 UTF-8 (65001) 변경하시면 제대로 나올겁니다.


또는 파워쉘을 사용하세요.





2015. 11. 9., 오후 1:45, kim ks <key1...@gmail.com> 작성:

--

---
이 메일은 Google 그룹스 '한국 루비 사용자 모임' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 rubykr+un...@googlegroups.com에 이메일을 보내세요.
http://groups.google.com/group/rubykr에서 이 그룹을 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.

kim ks

unread,
Nov 9, 2015, 3:47:11 AM11/9/15
to 한국 루비 사용자 모임
감사합니다, utf-8  로 나오는데요. sqlite3 에서는 화면에 잘보여주던데요,   Ruby버전은 2.1.7 인데요

kim ks

unread,
Nov 9, 2015, 3:49:52 AM11/9/15
to 한국 루비 사용자 모임
감사합니다, 화면상에서 다른 방식으로 하면 잘나옵니다. SQLite3에서 데이터를 받아서 출력하는데 문제가 있는것 같습니다. 보내주신 내용대로 적용해도 되지 않네요

kim ks

unread,
Nov 9, 2015, 4:19:52 AM11/9/15
to 한국 루비 사용자 모임
irb 알려줘서 감사합니다, irb에서 
db.execute ' insert into tsg_table values (?, ?, ?, ?, ?)', "직장","ksKim","0","1","2" 을 수행하여 sqlite에서 쿼리하여 보니 한글이 제대로 않들어가네요.
제가 생각하기에 SQLite3는 한글처리를 잘하는데 Ruby에서 못하고 있는것 같습니다.

kim ks

unread,
Nov 10, 2015, 1:37:18 AM11/10/15
to 한국 루비 사용자 모임
stackoverflow.com에 이런 내용이 나오더라구요 value.force_encoding("UTF-8")  이걸로 SQLite3에 데이터를 제대로 insert 할수 있었습니다.
요거 force_encoding("UTF-8")을 사용하면 되겠습니다.  도움주신분들께 감사 드립니다.

2015년 11월 9일 월요일 오후 6시 19분 52초 UTC+9, kim ks 님의 말:
Reply all
Reply to author
Forward
0 new messages