• ベストアンサー

vNoteのBODY部の取得(長めです)

ドコモの携帯からパソコンへ画像を送るとjpgファイルがBase64でエンコードされ、パソコン側では「mypic.vnt」というvNote形式のファイルになるのですが、元の画像に戻すにはBODY部をデコードすれば良いという事がわかりました。試しにBODY部のみを切り取ってデコードしたら、ちゃんと元のjpgファイルになりました。 そこで、BODY部の部分だけを取り出してデコードするプログラムを作りたいと考えています。(BODY部:「/9j/」から「END:VNOTE」の直前までの部分) ファイルの中身の部分文字列を取り出す方法としてどのような方法が可能でしょうか?調べてみてsubstringというメソッドを使えば良いかなと思ったのですが、strに直接文字列が代入されているわけでもないし、引数の番号も何番目かなんてファイルによって異なるので使えないですよね…。。(見当違いの考え方だったらすみません…)キーワード検索みたいなものがあればいいのですが…。どなたかご存じの方がいらっしゃったらご教授お願いします。 ↓はvNoteの中身です。 --------------------------- BEGIN:VNOTE VERSION:1.1 X-DOCOMO-TYPE:JPEG X-DOCOMO-SIZE:288X352 X-DOCOMO-FILESIZE:13095byte X-DOCOMO-FILENAME:DSC00820.jpg SUMMARY;ENCODING=QUOTED-PRINTABLE;CHARSET=SHIFT_JIS: DATE:20041004T082700Z X-DOCOMO-BODY;ENCODING=BASE64:/9j/4QyrRXhpZgAASUkqAAg・・・省略・・・・・・・・・・・・・・・・・ Mgo0AT7JFg/6Quagkh2dJEb6GgepD2pMUDExSYoASigQ0jmigBKKAP/Z END:VNOTE ---------------------------

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

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.3

#1です。強調して、もう一度書きます。 「行単位で」処理をする。 (「行単位で読み込む」と言っているのではない。「処理をする」。) --- ファイルに100行、200行書かれていようと 1行1行取り出せば、 それは単なる、見慣れたString型文字列。 この1行文字列に、Base64データが入っていれば、 そこを取り出せばよいし、 入っていなければ、 何も処理をしなければよい。 以上の処理を、全行分、繰り返せば、 あ~ら不思議、 完璧なBase64データが得られている。 String stock="";//Base64データ蓄積用変数 while(true) { ・line = readLine(); ・もしlineにBase64データが入っていれば、 ・その部分(Base64データの部分)を切り出して ・切り出したものを蓄積用変数stock に蓄える(※文字列連結) } --- 1行1行見ていけば、難しい話も簡単になる、ということです。 (※ただし上記の流れを実際にソースコードにするのは、 プログラミング初学者にはちょっと難しい部分が1箇所(?)あるかも) --- で、これは前置き。 これからが本題。(?) ちゃんとした入門書を使ってしっかり勉強しましょう。 「ファイルデータを解析したい」という要求は「高度な要求」なので、 だったらそのまえに「基礎事項」を身につけてから 質問すべし、ということ。 質問者さんがreadLine()、substring()、equals()、charAt()、indexOf()、 StringBuffer、文字列連結など(の使い道)でつまずいているようでは、 話のしようがないですよ、回答のつけようがないですよ、ってこと。 現に、#2さんが「答え(処理の流れ)」を書いているのに、 (「従って、行毎に…」の箇所) 質問者さんはそれにはまるで反応を示してませんよね。 つまりやっぱり入門書程度のことが身についていないので、 回答者の回答の言葉の「意味」がわからないのだと思います。 ってことで、「勉強してから質問」。 そうすれば道は開けるかと。

参考URL:
http://www.geocities.co.jp/CollegeLife-Club/8577/prog_java_MakeHtml.htm
kyoko0224
質問者

お礼

お礼が大変遅くなってしまい申し訳ございません。 なんとかプログラムは出来ました。 こんな初心者に丁寧に教えて下さりありがとうございました。 これからはもっと勉強してから質問したいと思います。 本当にご迷惑おかけしました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

>ファイルの中身の部分文字列を取り出す方法としてどのような方法が可能でしょうか? ファイルの中身を直接取り出すことはできません。 (大抵の言語はそうです) 一度、メモリ(変数)に格納してから作業します。 今回の場合は、画像データということでサイズがかなり大きくなることが 予想されます。 従って、行毎にデータの開始となる文字を探し、見つかったら終了となる文字を 見つけるまでファイルに書き出すようなことになると思います。 (小さければ、全部読み込んでもいいでしょう) ご質問にある例を見る限り、開始データは、 BODY;ENCODING=BASE64:/9j/ でいいような気がします。 ただし、BEGIN:VNOTE から END:VNOTE の間にあることが必要でしょう。 また、このデータが添付ファイル中のことなのか不明ですが、 メールファイルそのものの中に記述されているのなら、 メールファイルのフォーマットを解析し実行する必要もあります。 ちなみち、文字列の中から、任意の文字列を探すことはできますよ。 String#indexOf()を見てください。 よけいなお世話かもしれませんが、もう少しいろいろと勉強してからでないと、 難しい気がしますけど。

kyoko0224
質問者

お礼

お礼が遅くなり申し訳ありません。 配列にデータを入れる事は出来ました。 このデータは添付ファイル中のことではないので、データは上に書いたものだけになります。 任意の文字列を探す方法を教えていただきありがとうございます。 まだよくわからないのでこれから勉強しようと思います。 確かにもっと勉強しないと難しいですよね…。。。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.1

>ファイルの中身の部分文字列を取り出す方法としてどのような方法が可能でしょうか データのフォーマットが「行単位」である以上、 それを処理するほうも、 行単位、つまり、よくある BufferedReader br; while(true) {  String l = br.readLine();  ・  ・  ・ } みたいな処理でいいのでは? http://msugai.fc2web.com/java/IO/BufferedReader.html 自然だし簡単なやり方だと思う。部分文字列を取り出すのに、悩むこともないし。

参考URL:
http://msugai.fc2web.com/java/IO/BufferedReader.html
kyoko0224
質問者

お礼

お礼が遅くなり申し訳ありません。 行単位で読み込む事はわかりました。 部分文字列の取り出し方がまだよくわからないですが、がんばってみようと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 最近よく見かける yEnc なる ファイルのデコード

    最近よく見かける yEnc なる ファイルで中身が =ybegin line=128 size=110009 name=xxxxx.jpg などで始まる、JPG? のファイルは いったい何なのでしょうか? いったいどうやって、デコード? すればよいのでしょう? なにかフリーのソフトなどあるのでしょうか? ご存知の方、おいででしたら 教えてくださいませ。 ちなみに、 This file was encoded with the new yEnc encoding scheme, designed to save bandwidth by dramatically reducing the 30%+ overhead incurred by UU and Base64. なる説明があったので、Base64 や UU での デコードを試しましたが ダメなようです。 さっぱりわからない~!!

  • yEnc なる ファイル ?

    最近よく見かける yEnc なる ファイルで中身が =ybegin line=128 size=110009 name=xxxxx.jpg などで始まる、JPG? のファイルは いったい何なのでしょうか? いったいどうやって、デコード? すればよいのでしょう? なにかフリーのソフトなどあるのでしょうか? ご存知の方、おいででしたら 教えてくださいませ。 ちなみに、 This file was encoded with the new yEnc encoding scheme, designed to save bandwidth by dramatically reducing the 30%+ overhead incurred by UU and Base64. なる説明があったので、Base64 や UU での デコードを試しましたが ダメなようです。 さっぱりわからない~!! あと http://www.winews.net/yenc/tools.htm から windows のところで それらしいのがないか、みたのですがな日本語ではないので、よくわかりません。 もちろん、翻訳を通しても・・・・・ だれか、たすけて~

  • .vntファイルが解読出来ません

    初めて質問させていただきます。 .vntファイルを開くことが出来ず困っています。 元々はandroidスマホのメモ帳アプリ(スマホに元々入っていたもの)のデータです。 https://okwave.jp/qa/q9391654.html ↑こちらを参考にVmassage/Vnoteファイル変換を使い変換したところ、 BEGIN:VNOTE VERSION:1.1 BODY;CHARSET=SHIFT_JIS;ENCODING=QUOTED-PRINTABLE:=83=82=(以下略) と続くものは直せたのですが、 BEGIN:VNOTE VERSION:1.1 X-FORMAT:1 BODY;ENCODING=BASE64:IiBpZD0iVz(以下略) と以下=無しでアルファベットや数字だけの羅列が続くものは上手くいきませんでした。 後者のようになってしまったファイルをどうにかして前者に変換したり、解読する方法はないでしょうか。 何か方法があればお願い致します。

  • base64?デコード?

    「テキストファイルを送るからデコードして使って」と言われ、 下記のような内容のファイルをもらったのですが、デコードとはどうすればいいのでしょうか? ・1つ目のテキストファイル "begin-base64 664 ○○(ファイル名).zip
fsjiiafaBABAEakhajkiij~(以降ランダムな文字列)" info="base64>>zip" ・2つ目のテキストファイル "FkufaskKKSDOkaklaaeiijjn~(以降ランダムな文字列)=" info="○○(ファイル名)
base64->rar" ネットで調べて、「このテキストファイルをバイナリソフトでデコードすれば目的のファイルになる」 ということはわかったんですが、 テキストの中のどこからどこまでをコピーすればいいのかわかりません。 ランダムな文字列の部分だけの新しいテキストファイルをつくってデコードをしたんですがエラーが出ました。 エンコードしたソフトでデコードすればいいのでしょうか? よろしくお願いいたします。

  • httpリクエストのbody部分について

    学校でhttpリクエストの課題が出たのですが、よくわかりません。 専門学校の課題でhttpリクエストのボディ部を解析をせよというのが出ました。 色々調べてみたのですが、ボディ部分が暗号?みたいな感じでよくわかりません。 urlデコード後に、base64でデコードしてみましたが、文字化けしてしまいました。 md5やSHA1ハッシュが絡んでいるのでしょうか? 他にヒントもなく困り果てております。 以下、課題のhttpリクエストです。 POST http://test.co.jp/create HTTP/1.1 Host: test.co.jp User-Agent: Mozilla/5.0 Content-Length: Accept: */* Accept-Language: ja-jp Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Cookie: id=753ce0fed3b134ed9ff770e332f3f542 Connection: keep-alive Proxy-Connection: keep-alive ※↓この部分です data=zSAPjwA6ZQ97l1ckhMfATMM6VEGufB8hrmoWAvVWq2CFFsPoCaS6CgPRE8cVoyz3n%2b0Lot4g41LjfBC2%2fOa3bPZYOn0JIwMHzi%2b4UpIi8sX3o0JGyIUa%2bl3JTLM%2bKfMMiXIUfxmTVCRpbI3LfEltKstlBEa3NK25qwl0UWo2EPLD%2fSMjqyqbqeTXy4yYgI2D4RpfQmzi%2fU%2b9kuB%2bk0DytDkN3Ca1dsx4aZufiLNf67M6zt8p3FyfsbF3dQl%2beRlaG7NG0tmZaR%2fy6hmObYkLfxPVmKwPyoCOmXRvpM6nJCAcXIZNF0bfM4yh76A6UknzQJ40d7fgVRQaGKUsTNxFBFI2TzsLySpXV5LE0P%2biMhwcqbmoeN237lfnzlGBST9e 皆様のお力をお借りできれば幸いです。 宜しくお願い致します。

  • PHPから携帯へメール送信

    いつもお世話になっております。 PHPから携帯電話へ"絵文字付き"でメールを送るプログラムを作成している のですが、『base64_encode』等を使用して絵文字の表示までは行う事がで きました。 ですが、本文が途中で途切れてしまうのです・・・。 PHP側は、 $to = mb_convert_encoding(mb_decode_mimeheader($structure->headers['from']), 'SJIS', 'ISO-2022-JP'); $subject = mb_convert_encoding(mb_decode_mimeheader($structure->headers['subject']), 'SJIS', 'ISO-2022-JP'); (省略)  ・  ・ $body = $structure->body; $body = preg_replace('/\s*>\s.*/', '', $body); $body = mb_convert_encoding($body, 'SJIS', 'ISO-2022-JP'); //---------------------------------- // base64_encode //---------------------------------- $subject = "=?shift_jis?B?" . base64_encode($subject) . "?="; $body = base64_encode($body); //---------------------------------- // ヘッダを作成 //---------------------------------- $headers = "From: test@mail.com\n"; $headers .= "MIME-Version: 1.0\n"; $headers .= "Content-Type: text/plain; charset=Shift-JIS\n"; $headers .= "Content-Transfer-Encoding: base64"; //---------------------------------- // メール送信 //---------------------------------- $res = mail($to, $subject, $body, $headers);  ・  ・ (省略) 上記のように記述しています。 メールは送れます。絵文字も表示されます。ですが、本文が途中で途切れ てしまいます。 どなたかご教授をお願い致します。

    • ベストアンサー
    • PHP
  • excel VBA(vbscript) patttern処理

    excel VBA(vbscript) (前提)文字列は、FILE20080301_0330system.xlsのように 英字列数字列_数字列英字列.xlsからなる文字列とする。 あるいはFILE200803010330system.xls  のように途中の"_”がなかったりする。 (例) x =FILE20080301_0330system.xls   上記のような文字変数x を処理して変数yを求める。ただし"_”はない場合もある。 y=FILEsystem     (つまり.xlsを除き、先頭の英字を残し、続いて数字や_を取り去り後ろの英字部分を採用した文字列とする) また文字変数x を処理して変数zを求める。 z=20041211_1212.xls   (つまり.、先頭の英字を取り去り残し、続いて数字部分と_を残し後ろの英字部分を除き 、さらにxlsを残した文字列とする) マクロコードについて下記のコードが解決しますが、 Sub test()  Dim x As String  Dim y As String  Dim z As String   x = "FILE20041211_1212system.xls"  With CreateObject("VBScript.RegEXP") .Pattern = "^(\D*)(\d+\_?\d+)(\D*)\.xls"    If .test(x) Then       y = .Replace(x, "$1") & .Replace(x, "$3")       z = .Replace(x, "$2") & ".xls"    End If       MsgBox x & vbLf & y & vbLf & z  End With End Sub (今回の質問) (例)x=FILE20041211_1212system.xlsにおいて データ自身が、.xlsの前に半角あるいは全角のspaceが1つ入っていても結果として求めるy,zを出すにはどのように.patternなど変更すればよいかを教えてほしい。つまり下記例 (例)x=FILE20041211_1212system .xlsでも同じ結果をだしたい。

  • 非表示の列があるか取得したい。

    Sub Macro1() Columns("a").Hidden = True End Sub としたら、A列が非表示になりますよね。 そして、セル全体に非表示の列があるかどうかを取得したい場合はどうすればいいでしょう? Sub Macro2() If Cells.Hidden = True Then MsgBox "非表示の列があります" End If End Sub をすると、実行時エラー1004になります。 それに Cells.Hiddenの時点で、列だけじゃなくなってしまいます。 あと、最終列はファイルによってまちまちです。 Z列の時もあれば、EAの時もあります。 ご回答よろしくお願いします。

  • UTF-16からUTF-8への変換

    こんにちは。 UTF-16からUFT-8への変換で困っています。 CSVファイルの中にbase64でエンコードされたデータがあり、その中にUTF-16(リトルエンディアン)のデータが埋め込まれています。 base64のデータのデコードは、MIME::Base64のdecode_base64で出来ました。 この中から、文字列を取り出して、uft-8に変換したいのですが、なにかうまい方法はないものでしょうか?

    • ベストアンサー
    • Perl
  • perlでxmlファイルを検索して表示する方法

    perlであるxmlファイルを検索して xmlファイルを表示する方法についてお伺いします c:\ -A --X 1.xml 2.jpg 3.jpg --Y --Z このような構造でxからzまでのディレクトリをさがして 「.xml」のファイルの中にある文字列「uuuuu」があれば そのファイルのリストを出力して、クリックすると表示 させたいのですが、perlでできますでしょうか このときファイルのリストを出力するときに 実際のファイル名を.xmlにある特定のタグについて囲まれた 文字列を表示したいと思っています。 (<name>abcde</name>) また「uuuuu」は任意で入力を要求するようにしたいと 思っています。 私ができることはテキストファイルの中身を表示するくらいです open (FILE, 'c:\A\X\1.xml') or die "$!"; while (my $line = <FILE>){ chomp $line; print "$line\n"; } close (FILE); ほかにこのような参考書、urlなどありましたら教えて いただけると幸いです よろしくお願いします