- PR -

byte[]の文字列かと復元方法について

1
投稿者投稿内容
トラジャ
ベテラン
会議室デビュー日: 2002/12/05
投稿数: 75
投稿日時: 2004-12-10 16:58
皆さん、お世話になります。

Vine Linuxで動作するシステムで、Win環境下で作成されたTextファイル(PHP)を、
Strutsのファイルアップロードで受け取って、DBに保存し、リクエストを受けて
前記でDBに保存されたTextデータを取得して、ファイル(システムが動作している
サーバー)に書き出すという処理をさせたいのですが。

Textファイルが"EUC-JP"や"Shift-JIS"など、文字コードが統一されていません。

アップロードの際には、文字コードが何かのデータは送られないため、システムで
判断しなければなりません。しかし"JisAutoDetect"は精度に問題があるので、
使いたくありません。

また、上記のデータを保存するDBの列は"nvarchar"のため、文字列で保存する必要
があります。

それで、アップロードされたファイルのbyte[]をいったん文字列化してDBに保存し、
ファイルとして書き出す際に、再度byte[]に復元してバイナリとして書き出すこと
ができないかと考えています。

それで

1.byte[]を文字列化する方法
2.文字列化されたbyte[]を復元する方法

この2点について、実際に可能なのか、可能であればどうすればよいのか、ご存じ
の方教えていただけませんでしょうか?

よろしくお願いいたします。


未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2004-12-10 17:17
引用:

"JisAutoDetect"は精度に問題があるので、使いたくありません。


JisAutoDetect は精度うんぬんというか UTF-8 は判定できないとか問題ありますから、使い物にならないですね。

それはともかく。nvarchar って 4000文字までしか格納できないので、あとあと困りそうな機がしますが、そのあたりは大丈夫なんでしょうか。私なら nvarchar 型ではなく image 型などの BLOB を使います。プログラム側からもストリームとして読み書きできるし…。

引用:

1.byte[]を文字列化する方法
2.文字列化されたbyte[]を復元する方法


それでも、nvarchar に格納する! ということであれば、Base64 なりを使ってくださいな。Java なら sun.misc.BASE64Decoder, sun.misc.BASE64EncoderBase64 があります。
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2004-12-10 18:03
引用:

未記入さんの書き込み (2004-12-10 17:17) より:
nvarchar って 4000文字までしか格納できないので、あとあと困りそうな機がしますが、そのあたりは大丈夫なんでしょうか。私なら nvarchar 型ではなく image 型などの BLOB を使います。プログラム側からもストリームとして読み書きできるし…。
(中略)
それでも、nvarchar に格納する! ということであれば、Base64 なりを使ってくださいな。Java なら sun.misc.BASE64Decoder, sun.misc.BASE64EncoderBase64 があります。


nvarcharってUnicode文字列の格納ですよね。そこにBase64を入れると、ascii文字も全部2byte使うわけだからかなり効率悪いですね。BLOBにしといた方が…。
トラジャ
ベテラン
会議室デビュー日: 2002/12/05
投稿数: 75
投稿日時: 2004-12-10 20:15
未記入さん、Wataさんありがとうございます。

すいません。DBの格納型は"nvarchar"ではなく、"ntext"型でした。
ちなみに、DBはSQL Serverです。

それと、すでに稼働中のシステムに今回の仕様が追加ということなので、
DBの型は変更できないんです。

"text"型にも、未記入さんが教えてくださった"sun.misc.BASE64Decoder"は
使えますでしょうか。

このさい、DBのリソースを多少食ってしまうかもしれませんが、しょうがないです。

よろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)