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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

5253閲覧

pngデータをSQLiteデータベースに保存して、取得すると文字化けする

kakoarisa

総合スコア9

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/08/22 06:49

お世話になっております。

SQLiteに保存したpngデータを取得して書き込みを行うプログラムを作成したいのですが、
以下のコードですと、文字化けが発生してしまいます。

Python

1 1 import sys 2 2 import struct 3 3 import sqlite3 4 4 import codecs 5 5 import types 6 6 7 7 8 8 dbname = 'test.sqlite3' 9 9 10 10 conn = sqlite3.connect(dbname) 11 11 c = conn.cursor() 12 12 13 13 outfile = open("new.png", 'w') 14 14 < 15 15 select_sql = 'SELECT * FROM images WHERE id="1"' 16 16 for row in c.execute(select_sql): 17 17 18 18 19 19 print(row[0]) # ID 20 20 print(row[1]) # "test" 21 21 print(row[2]) # ここにpng画像をバイナリにして格納されたものがある 22 22 print(row[3]) # create 23 23 24 24 25 25 outfile.write(tmp)<

そして出力は以下のようになります

1 test �PNG IHD���� IDAcXϰ�_��IEND�B`� 2017-06-20 19:32:25.593800

どうやらここだけ(row[2])勝手にバイナリが何かしらの文字コードに変更されているみたいです。

どうか、ご享受おねがいします。

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

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

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

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

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

mattn

2017/08/22 07:00

バイナリを格納しているのですから、バイナリを表示して化けるのは当然かと思います。
guest

回答1

0

PNGはバイナリーデータになるので、SQLiteなら通常はBLOB形式で入っているはず。BLOBは生データそのままなので、そのままprintしても文字化けしてしまうのは当然です。なので、普通は取得したデータをファイルへそのまま書き出して確認します。
カラム名が何かはわかりませんが、3カラム目がBLOB形式だと思います。(テーブルのスキーマを確認すればわかります)

以下のサイトなどを参考にやってみてください。(ここではPerlを使ってますけどね)

SQLiteのdbにファイルを保存する方法

投稿2017/08/22 08:35

PineMatsu

総合スコア3579

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問