バイナリデータを文字に変換して圧縮もしたい

このQ&Aのポイント
  • バイナリデータをZIP圧縮して文字列に変換して印刷する際、150ページとなりますが、10ページに抑えたいです。
  • 日本語の文字列にバイナリデータを変換することで、印刷枚数を減らす方法があれば知りたいです。
  • バックアップする重要なデータをクラウドと紙の両方で保管しておきたいです。データの復元にはOCRなどを使用することが想定されます。
回答を見る
  • ベストアンサー

バイナリデータを文字に変換して圧縮もしたい

あるバイナリデータのバックアップを印刷したいと考えています。 元のバイナリデータが2MBぐらいあるのでそれをZIP圧縮して1MBでそれをbase64で文字列に変換すると 2MBぐらいの文字列になってしまい 印刷すると150ページでした。 金庫にしまうにしても150ページでは多いのでなんとか10ページぐらいに抑えたいです。 そこで考えたのですがbase64の要領で日本語の文字列に変換することができれば印刷枚数を減らせるかと思うのですが そういった圧縮を行うライブラリってないものでしょうか? 容量は減らなくてもいいので 印刷のページ数を減らしたいです。 base64が64文字に対し日本語の文字列は5万文字?あるので大幅に減らせそうですし 小学生で習う漢字レベルだけでも1文字の情報量が100倍以上になるのでうまくいくのかなぁ?っと。 ちなみにバックアップするものは秘密鍵のような物で もちろん暗号化してクラウド等オンラインでもバックアップをしていますが 非常に重要な物のため万が一に備えて紙でも印刷して残しておき いざというときに復元できるようにしたいです。 復元する際はOCR使って さらに目視でデータ確認で数時間とか数日かかるとしても 復元したいと思うレベルのデータです。 環境はVisualStudioでC#で組もうかと思っていますが 変換と復元作業ができれば環境は問いません。 いいライブラリやアルゴリズムがあれば教えてください。 あるいは日本語文字でなくても QRコードのように印刷した紙から一定のアルゴリズムでデコードできればなんでもいいのでよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

> base64が64文字に対し日本語の文字列は5万文字?あるので大幅に減らせそう 64文字(通り)から5万文字(通り)に増えても,情報量は約2.6倍にしかなりません。 大幅に減らせるなんて事は無いです。 日本語だと文字の幅も増えるので必要スペースを考えるとさらに不利です。 似た文字が増えて誤読する可能性も考えると素直にBase64使ったほうが良いでしょう。 > QRコードのように なら、QRコードを使えば良いと思います。 目的にも合ってそうですし。

その他の回答 (1)

noname#222867
noname#222867
回答No.1

そこまで大事なデータなら、rarにパス63ケタ圧縮して63ケタパスを金庫に入れたらええんやないか? 現状rarパス破るの不可能やで? 確か世界最高のスパコンでも宇宙が誕生した年数160億年のさらに数千倍とか、そんなレベルや。 宇宙が消滅しても生き残る位の未知のテクノロジーでも見つけん限り無理や。

yukitakao
質問者

補足

それに近いことをしたファイルをファイルサーバーからクラウド上などなどに保存してますが 間違ってファイル消しちゃったり ウィルス感染で消えたり クラウドのパスワード忘れて暗号化ファイルが取り出せなくなったりなどなど、、、 リスク分散の一環としてコンピューター関係ない金庫でも保存したいな、と。 まぁ自分自身はコンピューター技術者としては99.999999%大丈夫だろうといろいろなところにデータ保存してますが 年代上の人は紙がなんだかんだで安心なようで 安全だって説得力出すためにやろうと考えています。 耐火金庫でもCDRはダメだけど 書類なら火事になっても○時間は大丈夫ですし・・・

関連するQ&A

  • 文字列の圧縮・復元アルゴリズムで困っています

    昔専門学校でやったけれど完全に忘れてしまっている文字列圧縮・復元の アルゴリズムについて教えて頂きたいのです。 仕様としては文字列「AAAABBBCCDDDDDEF」と並んでいた場合に圧縮を 実行すると「A4B3C2D5EF」と文字列を圧縮し、復元の場合はこの文字列を元に 圧縮前の文字列「AAAABBBCCDDDDDEF」にするといった感じのものです。 C言語かC#言語で答えて頂けるとありがたいです。

  • VB バイナリ文字列へ変換

    VBでバイナリ文字列へ変換を行いたいのですが、どうしたら良いでしょうか?

  • C# ファイル→バイナリ→ファイルの変換

    いつもお世話になっています。 只今、エクセルやワードなどのファイルをバイナリデータに変換し DBへ格納するプログラムを作成しています。 使用しているDBはSQLServerです バイナリデータに変換して格納することは出来ました ですが、そこから元のファイルに戻す方法が分かりません やりたいことは  1:バイナリデータを復元  2:ダウンロードする  3:ダウンロードすることなく開く の3つです 調べ方が悪いのか、全く見つからず困っています。 WebではなくWindowsフォームがベースのプログラムです サンプルや手順などがわかる方、よろしくお願いします。

  • バイナリ5バイトを文字10バイトに変換

    バイナリ5バイトを文字10バイトに変換 いつもお世話になっています。 C++初心者です。 12 34 56 78 90(バイナリ5バイト)を 1234567890(文字10バイト)に変換する方法はありますか? バイナリで読み込んだデータがあり、特定箇所に、数字10桁が格納されてます。 下記イメージです。 12 34 56 78 90(バイナリ5バイト) それを文字10バイトで処理するしたいのですが、変換方法がネットで探せませんでした。 お知恵をお貸しください。 環境はVC++6 です。 よろしくお願いします。

  • バイナリデータの取り方

    VB6を使用して、バイナリファイルをバイナリデータとして文字列にとりたいのですが、全角文字が絡んだ時の処理がうまくいきません。 バイナリファイルをString型の変数に丸ごと読み込んで、後は何バイトから何バイト目を抜き取り数値に変換…という処理をしようとしています。 本来は、バイナリでファイルをオープンして、Getコマンドで取得するのが手っ取り早いのですが、ファイルアクセス回数を減らすため、このような面倒な方法をとっております。 そこで仮に、 dim test as string dim i as integer test = "aあ" & chr(1) & "0 " For i = 1 to 6 Debug.Print Asc(Strconv( _ MidB(Strconv(test,vbFromUnicode),i,1), _ vbUnicode)) Next のようなソースを作ってみました。(本来は文字列は数100KByte…) しかしながら、この方法ですと上の例では2Byte目、つまり「あ」の文字の1Byte目が「&H00」になってしまいます。その次は「&HA0」、他の箇所も問題ないのですが… おそらくは根本的に違う方法で解決すべきではないかと思うのですがその方法がわかりません。 なお、この格納データはバイナリデータなので、意図的に全角文字にしていくてもその値によって(偶然)全角文字になったり制御文字になったりしますので前もって全角文字に対する処理は難しいと考えてます。 質問の仕方が良くなく、質問の内容がなかなかご理解いただけないとは思いますが、ご存知の方、ご経験者の方、ご教授お願いいたします。

  • テキストデータをそのままバイナリへ

    初心者です。 テキストデータ(ASCII)として取り込んだ 「05 50 0E」 といった文字列を そのままバイナリデータ(16進)としての 「05 50 0E」 に変換したいのですが、こういった処理をする関数ってあるでしょうか? もしなければ作ってみたいのですが、その際の考え方や有用な関数などありましたら教えていただけると嬉しいです。

  • バイナリデータの編集

    バイナリデータの編集を行おうとしています。 バイナリエディタ等を使用すれば編集はできるのですが、一文字ずつ(1バイトずつ)編集するのに苦労しています。 エクセルの機能を使って文字列(バイトの列)を編集し、一括で貼り付けたいと思っています。 何か良い方法がありますでしょうか?

  • 【デコード】バイナリーデータを文字列にしたい。

    いつもお世話になっています。 いろいろ調べたのですが、これといった回答が見つからなかったので質問させて頂きます。 今回も皆様の知恵をお貸し下さい。 環境 Microsoft Visual Studio .NET 2003 WindowsXP Microsoft .NET Framework 1.1 表題にも書きましたが、バイナリーデータを文字列として変換したいです。 System.Text.Encoding.GetStringを使用しようとしましたが、思うようにいきませんでした。 他の物が何かないかとネットで調べ、Bas64と言うのが引っかかりましたが、これは全く違うものでした。 例:SJISの30というデータを文字列に戻したい場合にどうすればよいのか。 行き詰ってしまいましたので、質問した次第です。 宜しくお願い致します。

  • VBAで文字列を圧縮、復号したい

    以下のサイトと同じことをVBAで実現できないでしょうか? JavaScriptで文字列を圧縮する https://setchi.hatenablog.com/entry/2013/11/09/114432 元の文字列:エクセル 圧縮された文字列:U3U1VrUwUnW0UIUy3KAMJycww1jV0QkA 復号された文字列:エクセル データの復号をすることになり、エクセルで処理を行いたいと思ってます、データは圧縮された文字列Base64のようで、サイトなどで調べVBAでBase64の復号を試しましたが正しく文字列にならず、上記のサイトで試したところ正常な文字列に復号されました。これをなんとかVBAで実現したいと思っとおります、何卒、ご教授お願いします。

  • LZ法で圧縮したデータについて

    LZ法で圧縮したデータについて 現在LZ法(LZ77)で圧縮したデータをバイナリエディタで見ております。 そのデータを解凍しなければならないため、とりあえずLZ法の圧縮/解凍プログラムを組みました。 とあるソフトが出力したデータなのですが、そこのドキュメントにはLZ77で圧縮しているという記述があります。 しかしバイナリエディタで中身を見ると、中間辺りにFF FF FF FFというFFの連なりが多量に見つかりました(20~30Byte) LZ法のアルゴリズムの性質上、同じデータが連なるというのはありえないと思うのですが、認識違いでしょうか? 私はLZ77+huffmanを使っているのでは無いかと思っています。(しかしドキュメントにはLZ77の記述しかありません) 更にLZ法は圧縮情報の持ち方に規定が無い(RFC規定に準じた圧縮アルゴリズムを除く(gzip等))為 そのソフトが吐き出したLZ圧縮が掛かっていると思われるデータについての情報が無く スライド窓の大きさのビット数などが分からないため、解凍に手を焼いています。 これはLZ法で圧縮したデータだよと言われて、只そのデータのみを渡されて それを解凍するというのは可能なのでしょうか?

専門家に質問してみよう