アプリ版:「スタンプのみでお礼する」機能のリリースについて

javaのプログラムをEclipseでデバッグ中なのですが、
socket通信で取得したString型のデータをPostgreSQL(ver8.3)のtext型に
INSERTすると

org.postgresql.util.PSQLException: ERROR: insufficient data left in message

とエラーが発生してしまいます。

String型の変数infoに格納している文字列を
EclipseのWatchWindowで見ると以下の様な値になっています。

変数名
info    "85E_ A B C t r a k "

※ "A B C t r a k "の部分だけフォントが異なる(ここだけ文字コード違う??)

試しにinfo変数の中身を

byte[] btext = info.getBytes();

でbyte[]型に格納してみたら。
以下の様な値になっていました。

変数名
btext
  [0]   56     ← ASCIIコードの'8'
  [1]   53     ← ASCIIコードの'5'
  [2]   95     ← ASCIIコードの'_'
  [3]   0      ← ?
  [4]   65     ← ASCIIコードの'A'
  [5]   0      ← ?
  [6]   66     ← ASCIIコードの'B'
  [7]   0      ← ?
  [8]   67     ← ASCIIコードの'C'
  [9]   0      ← ?
  [10]   116    ← ASCIIコードの't'
  [11]   0      ← ?
  [12]   114    ← ASCIIコードの'r'
  [13]   0      ← ?
  [14]   97     ← ASCIIコードの'a'
  [15]   0      ← ?
  [16]   107     ← ASCIIコードの'k'
  [17]   0      ← ?

となっています。。
この様な文字列をデータベースに格納するにはどうしたらよいのでしょうか?

ちなみにEcripseでWatchした際に変なフォントになっていない文字列がINSERT
できることは確認済です。

A 回答 (1件)

詳しいことはわかりませんが、フィーリングでいうと、


エラーの原因は文字列のはずのデータに0x00が入っているからで、
一文字置きに0x00が入っているのはUnicode(UTF-16)のバイト列をASCII(もしくはASCII互換の文字コード)で解釈した状況に見えます。
あとJavaは確か文字列をUnicodeで扱っていた気がします。
    • good
    • 0
この回答へのお礼

回答有難う御座います。

まさにそんな感じなのです。問題は文字列に0x00が入っているからのようです。

で、これが部分的に0x00が入っているのですが可能であればこのままデータベースに
突っ込みたいと思っています。

このような場合はDB側で文字列として扱わない方がよいのでしょうか?
(文字列ではないとすると型をなににすればよかでしょか?)

お礼日時:2010/12/20 09:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!