強火で進め

このブログではプログラム関連の記事を中心に書いてます。

iPhone用の絵文字を使ったプログラムの作り方

※こちらエントリーは以下のエントリー見ていることを前提に書きますので未読の人は先に確認しておいて下さい。

iPhoneの絵文字をもっともっと活用する方法 - 強火で進め
http://d.hatena.ne.jp/nakamura001/20081123/1227473574

iPhone 2.2から使える様になった絵文字ですがこちら仕様としてはSoftBankの絵文字と互換性があり、またSoftBankのものと同様にUnicodeのフリー領域を利用している様です。

そのため絵文字を使いたいときは指定のUnicode(UTF-8)の値を設定するだけで表示が可能です。

使用できる絵文字はこちらを参照下さい。

WEB & NETWORK 絵文字一覧01
http://creation.mb.softbank.jp/web/web_pic_01.html

例えばUnicodeが E001 のものを使いたい場合は対応するUTF-8の値を調べ、その値を使用することで該当する絵文字が使えます。

対応するUTF-8の値を調べる場合、Macでは「文字パレット」を使います。

文字パレットの使い方

1. ことえりのアイコンを右クリックし、「文字パレットを表示」を選択します。

2. 左上の「表示:」を「コード表」に変更します。
次に2段目の文字選択部分で使用したい文字を選択します。

3. 例としてUnicodeが E001 の絵文字の使い方を紹介します。
E001 のうち1桁目の部分は文字パレットでは横軸で表されているので
列=E000、行=1となる場所を選択します。

4. するとウィンドウの下部にUTF-8のコードが表示され確認できます。このコード使用することで実際に絵文字を表示することができます。

エディタを開いた状態で先ほど選択した E001 の文字(実際には未使用領域に絵文字が割り当てられているのでブランクを示すアイコン)をダブルクリックすることで該当する文字をエディタにコピーできます。

エディタによってはコピーできないものもあるかもしれませんが Smultron では大丈夫でした。

このコピーしたものをファイルに保存し、バイナリエディタなどでどのようなバイト順で格納されているかプログラムに入る前に確認しておくと良いでしょう。

基本的にはどの言語でも良いのでそのバイナリエディタで確認したものと同じバイナリを出力すれば絵文字が表示できます。

プログラム作成時の検証などは以下の様にするのが良いでしょう。

1. チェックしたい絵文字のデータをテキストファイルに出力。
2. エディタで開き、Gmailの新規メールの本文にコピペ。
3. iPhoneGmailを受け取り、絵文字が正しく表示されるか確認。

あと、こちらにCocoaのサンプルを2つ書いておきます。一応、Mac向けサンプルですがそんなに複雑なことはしていないのでiPhoneにもすぐに移植できると思います。どちらも自由にお使い下さい。

[サンプル1]PAGE 1の絵文字全てをテキストファイル(PAGE_1.txt)に出力するサンプル
※以下のプログラムをボタンのアクションなどで動作させて下さい。

      unichar uni;
        NSMutableString *mainString = [NSMutableString string];
        for (uni=0xE001;uni<=0xE05A;uni++) {
                [mainString appendFormat:@"%C", uni];
        }
        NSData *utf8Data = [mainString dataUsingEncoding:NSUTF8StringEncoding
allowLossyConversion:YES];
        [utf8Data writeToFile:@"PAGE_1.txt" atomically:YES]; 

[サンプル1]PAGE 1〜PAGE 6の絵文字全てをテキストファイルに出力するサンプル

	unichar uni;
	NSMutableString *mainString = [NSMutableString string];
	NSData *utf8Data;
	for (uni=0xE001;uni<=0xE05A;uni++) {
		[mainString appendFormat:@"%C %X\n", uni, uni];
	}
	utf8Data = [mainString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
	[utf8Data writeToFile:@"PAGE_1.txt" atomically:YES];

	mainString = [NSMutableString string];
	for (uni=0xE101;uni<=0xE15A;uni++) {
		[mainString appendFormat:@"%C %X\n", uni, uni];
	}
	utf8Data = [mainString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
	[utf8Data writeToFile:@"PAGE_2.txt" atomically:YES];
	
	mainString = [NSMutableString string];
	for (uni=0xE201;uni<=0xE253;uni++) {
		[mainString appendFormat:@"%C %X\n", uni, uni];
	}
	utf8Data = [mainString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
	[utf8Data writeToFile:@"PAGE_3.txt" atomically:YES];
	
	mainString = [NSMutableString string];
	for (uni=0xE301;uni<=0xE34D;uni++) {
		[mainString appendFormat:@"%C %X\n", uni, uni];
	}
	utf8Data = [mainString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
	[utf8Data writeToFile:@"PAGE_4.txt" atomically:YES];
	
	mainString = [NSMutableString string];
	for (uni=0xE401;uni<=0xE44C;uni++) {
		[mainString appendFormat:@"%C %X\n", uni, uni];
	}
	utf8Data = [mainString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
	[utf8Data writeToFile:@"PAGE_5.txt" atomically:YES];
	
	mainString = [NSMutableString string];
	for (uni=0xE501;uni<=0xE537;uni++) {
		[mainString appendFormat:@"%C %X\n", uni, uni];
	}
	utf8Data = [mainString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
	[utf8Data writeToFile:@"PAGE_6.txt" atomically:YES];