- - PR -
byte[]の文字列かと復元方法について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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-12-10 17:17
JisAutoDetect は精度うんぬんというか UTF-8 は判定できないとか問題ありますから、使い物にならないですね。 それはともかく。nvarchar って 4000文字までしか格納できないので、あとあと困りそうな機がしますが、そのあたりは大丈夫なんでしょうか。私なら nvarchar 型ではなく image 型などの BLOB を使います。プログラム側からもストリームとして読み書きできるし…。
それでも、nvarchar に格納する! ということであれば、Base64 なりを使ってくださいな。Java なら sun.misc.BASE64Decoder, sun.misc.BASE64EncoderBase64 があります。 | ||||||||
|
投稿日時: 2004-12-10 18:03
nvarcharってUnicode文字列の格納ですよね。そこにBase64を入れると、ascii文字も全部2byte使うわけだからかなり効率悪いですね。BLOBにしといた方が…。 | ||||||||
|
投稿日時: 2004-12-10 20:15
未記入さん、Wataさんありがとうございます。
すいません。DBの格納型は"nvarchar"ではなく、"ntext"型でした。 ちなみに、DBはSQL Serverです。 それと、すでに稼働中のシステムに今回の仕様が追加ということなので、 DBの型は変更できないんです。 "text"型にも、未記入さんが教えてくださった"sun.misc.BASE64Decoder"は 使えますでしょうか。 このさい、DBのリソースを多少食ってしまうかもしれませんが、しょうがないです。 よろしくお願いします。 |
1