質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

4079閲覧

rubyを使ってSQlite3を動かす

probaseball

総合スコア113

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

2クリップ

投稿2015/06/21 18:14

編集2015/06/22 15:57

rubyでsqlite3を動かそうとしているのですが、文字化けをして困っているので、力を借りに来ました。

ソースは、
require 'sqlite3'

db = SQLite3::Database.new("student.db")
sql = "insert into student values (1234567, '田中太郎', 1)"
db.execute(sql)
db.close

結果
sqlite3側 1234567|逕ー荳ュ螟ェ驛旨1 となってしまいます

どうすれば改善しますでしょうか?ぜひ回答おねがいします。

追記

回答ありがとうございます。

・shift_JISでやっても結果は変わらず、ruby側では名前のところが文字化け「\u7530\u4E2D\u592A\u90CE」となってしまっています。

・sqlite3側の select * from をやると「1234567|逕ー荳ュ螟ェ驛旨1」と出てきて、前回と変わりません。

・ソースをお借りして実行してみたのですが、やはり文字化けが治らず結果は同じものでした。
実際、できたと仰っていたので、こちらのテーブル作製が悪いのかと思うので、添削よろしくおねがいします。
sqlite3 の テーブル
create table student(
'学籍番号'integer,
'氏名'text,
'スコア'integer
);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

sqlite3のデータの文字エンコーディングは、utf-8なので(utf-16も可能)、sqlite3ライブラリが、エンコーディングがutf-8以外の文字列をutf-8に変換してからSQLを実行するようです。
なので、Windowsのコマンドプロンプトで使うなら、コマンドプロンプトの文字エンコードをutf-8二する必要があります。chcp 65001もしくはmode con cp select=65001です。
元に戻すのは、chcp 932もしくはmode con cp select=932です。

別の方法としては、データをutf-8に変換させないようにして、Shift_JISのままで使う。ただ、何か問題が出るかもしれません。

lang

1# encoding: Windows-31J スクリプトはShift_JISで書く 2require "sqlite3" 3 4db = SQLite3::Database.new("student.db") 5 sql = "insert into student values (1234567, '田中太郎', 1)" 6 db.execute(sql.force_encoding("utf-8")) 7db.close
D:\Temp>sqlite3 student.db SQLite version 3.7.11 2012-03-20 11:35:50 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> select * from student; 1234567|田中太郎|1 sqlite>

投稿2015/06/23 11:30

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

probaseball

2015/06/25 09:56

ありがとうございます!おかげさまで出来ました!
guest

0

前の回答者の追記的な形になると思いますが,

うるおぼえで申し訳ないのですが,MS-DOS要するにWindowsのコマンドプロンプトでは初期の文字コードがShift-JISだったような気がするので,Rubyの文字コードと異なっているのでないでしょうか?
下記のURLに従ってutf-8に変換してみてはどうでしょうか?

リンク内容

投稿2015/06/22 00:38

編集2015/06/22 00:43
Neight

総合スコア127

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Neight

2015/06/22 00:41

自分が提示した方法よりも,ソースコードをShift-JISに変換したほうがいいのかもしれません
guest

0

MacOSX 上での例になりますが。
ruby コード例と、sql 操作例をしめします。この方法では、文字化けは発生しませんでした。
参考になれば幸いです。

ruby コード:

lang

1# coding: utf-8 2 3require 'sqlite3' 4 5db = SQLite3::Database.new("student.db") 6sql = "insert into student values (1234567, '田中太郎', 1)" 7p db.execute(sql) 8db.close 9 10db = SQLite3::Database.new("student.db") 11sql = "select * from student" 12p db.execute(sql) 13db.close

sql 操作、プログラム実行例:

$ rm student.db remove student.db? y $ sqlite3 student.db SQLite version 3.8.5 2014-08-15 22:37:57 Enter ".help" for usage hints. sqlite> create table student(no int,name varchar(20), score int); sqlite> select * from student; sqlite> .exit $ ruby 1.rb [] [[1234567, "田中太郎", 1]] $ sqlite3 student.db SQLite version 3.8.5 2014-08-15 22:37:57 Enter ".help" for usage hints. sqlite> select * from student; 1234567|田中太郎|1 sqlite> .exit

一般的に ruby コードで 日本語を扱う場合は # coding: utf-8 のようにして、encoding を明示することが必要です。

投稿2015/06/21 21:46

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2015/06/21 22:11

Ruby2.0以降だとdefault script encodingがutf-8なので、utf-8の場合は指定を省略できます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問