Galaxy Tab に搭載されているメモ帳のデータを、メールでGalaxy Tab から添付送信したら、vnoteデータだったため、読めませんでした。仕方がないので、vnoteデータのデコード方法について調べました。
簡単すぎるので、サンプルプログラムへ直接データを埋め込んで確認をしています。
PHPだとこんな感じです。ファイルから読み込んでから変換とかする処理になっていませんが、そのあたりはすぐにできるでしょうから省略です。
$s = "=41=6E=64=72=6F=69=64=20=2B=20=69=2D=4A=65=74=74=79=20=3D=20=E6=90=BA=" . "\n" .
"=E5=B8=AF=E3=82=B5=E3=83=BC=E3=83=90=0D=0A=41=6E=64=72=6F=69=64=20=47=" . "\n" .
"=61=6C=61=78=79=20=54=61=62=E3=81=AB=E3=81=A4=E3=81=84=E3=81=A6" ;
print quoted_printable_decode($s);
?>
Javaのプログラムだとこんな感じです。Q_START, Q_ENDが謎かもしれませんが、そういうのがつけておけば問題なくデコードできる、ということだったはずです。プログラムを作ったときと、記事を書いているときの時間差が大きいので良く覚えていないのですが、そのままの文字列だとうまくいかないので、エンコードとデコードとを確認できるプログラムを書いた覚えがあります。
import java.io.UnsupportedEncodingException;
public class App {
public static void main(String[] args) {
try {
// quoted-printable
String src =
javax.mail.internet.MimeUtility.encodeText(
"こんにちは" +"\r\nJava",
"UTF-8", "Q"
);
System.out.println(src);
String dst = javax.mail.internet.MimeUtility.decodeText(src);
System.out.println(dst);
byte[] bytes = src.getBytes();
for (byte b : bytes) {
System.out.print(b + ":" + String.valueOf((char) b) + " ");
}
System.out.println();
System.out.println();
// "Android + i-Jetty = 携帯サーバ" + "\r\n" +"Android Galaxy Tabについて"
String Q_START = "=?UTF-8?Q?";
String Q_END = "?=";
String[] srcArray = {
"=41=6E=64=72=6F=69=64=20=2B=20=69=2D=4A=65=74=74=79=20=3D=20=E6=90=BA",
"=E5=B8=AF=E3=82=B5=E3=83=BC=E3=83=90=0D=0A=41=6E=64=72=6F=69=64=20=47",
"=61=6C=61=78=79=20=54=61=62=E3=81=AB=E3=81=A4=E3=81=84=E3=81=A6",
};
src = Q_START;
for (String s : srcArray) {
src += s;
}
src += Q_END;
System.out.println(src);
dst = javax.mail.internet.MimeUtility.decodeText(src);
System.out.print(dst);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
関連書籍:
宣伝:
Javaを基礎から学びたい人は、「改訂版-基礎Java-CD-ROM付」をどうぞ。Amazonの評価では、サンプルが単調という意見と、サンプルが難しすぎるという意見があり、どちらを信じればいいのかわからない状態になっています。著者の意見としては、本書ではプログラマになるために必要な基礎知識をしっかりと説明しています。ちょっと難しい内容であっても、基礎として必要なものは盛り込んでいます。また、最初のプログラミングの基本を理解するための章では、若干退屈でも初心者が理解できることに重点をおいて、プログラミング経験者が読んだら単調と思われる内容もきちんと説明しています。後半のサンプルプログラムが難しそうに感じるかどうかは人によってですが、実用的な内容となるように選んだ題材を、きちんとオブジェクト指向で書いてあります。今後プロフェッショナルとして、Javaのプログラムを作成するにあたって必要な知識を身につけたい人にとっては、価値のある一冊となるはずです。
ちなみに、どういった意図で本書が執筆されているかは「改訂版 基礎 Java について – hiro345」に書いてあります。参考にしていただければと思います。