GF Messenger [文字コードデータ仕様]

1. データ仕様概要

2. JIS0208 > UTF8 変換テーブル

3. UTF8 > JIS0208 変換テーブル

4. サンプルファイル

5. 情報元


1. データ仕様概要


[概要]

GF Messenger の開発初期段階ではJIS,UTF8変換マップデータを
プログラム内部に定義していましたが、他の定義などどんどん追加していくと
どうしても領域に余裕が無くなりました。

そのため変換マップデータをPDBファイルにしてアプリと別ファイルにし、
GF Messengerと別クリエーターIDで利用することにしました。


このマップデータをGF Messengerだけで利用するのはもったいないので、
他のアプリケーションでも利用できるように仕様を公開します。
Shift_JIS は JIS0208 から得られるので、このマップデータによって

Shift_JIS と UTF8 の相互変換が可能になります。

※ここで紹介している変換データPDBファイルは GF Messenger に同梱されています。



[共通仕様]

CreatorID chCD

DBType Data


2. JIS0208 > UTF-8 変換テーブル



JIS0208 を UTF8 に変換するための変換テーブルデータです。

Palm標準の日本語コード Shift_JIS を UTF-9 に変換するには

Shift_JIS > JIS0208 > UTF8

の順で変換します。



[基本仕様]

ファイル名 JIS0208toUTF8.pdb

CreatorID chCD

DBType Data

DatabaseName Jis0208ToUnicode



[レコードフォーマット]

name offset bytes データ数 備考
table 0 2 23901 UShort 変換データ。以下の関数でUTF8コードを取得。

レコードサイズはすべて 2byte(UShort) 固定です。

// この関数は サンプルソースに含まれています
// JIS0208 > Unicode
static UInt16 Jisx0208ToUnicode11(UInt16 jis)
{
    Handle  recHdl;
    UInt16 h, l, res = 0x0000;
    Jis0208ToUnicodeRec *rec;

    if(!dbJis0208Unicode) {return 0x0000;}

    h = (jis & 0xff00) >> 8;
    l = (jis & 0x00ff);

    if ((0x0021 <= h) && (h <= 0x007e) && (0x0021 <= l) && (l <= 0x007e)) {

	    recHdl = DmQueryRecord(dbJis0208Unicode, (h - 0x0021) * 0x005e + (l - 0x0021));
		rec = (Jis0208ToUnicodeRec *)MemHandleLock( recHdl );
		res = rec->code;
	}
    MemHandleUnlock(recHdl);
	
	return res;
}


3. UTF-8 > JIS0208 変換テーブル



UTF-8 を JIS0208 に変換するための変換テーブルデータです。

UTF-8 から Shift_JIS を取得するには

UTF-8 > JIS0208 > Shift_JIS

の順で変換します。



[基本仕様]

ファイル名 UTF8toJIS0208.pdb

CreatorID chCD

DBType Data

DatabaseName UnicodeToJis0208



[レコードフォーマット]

name offset bytes データ数 備考
size 0 2 1 UShort このレコードのデータ数。0の場合は変換対象無しなので0を返す。
table 2 521 256 UShort[256] 変換データ。すべて 0x00 の場合はレコード自体存在しない。

レコードサイズは 2 か 2 + (2 * 256) です。

UTF-8コードを256個で1レコードとしていますが、この256個セットのデータがすべて 0x0000 の場合は
size = 0x0000 で table が存在しない2byteのレコードになります。

// この関数は サンプルソースに含まれています
// Unicode > JIS0208
static UInt16 Unicode11ToJisx0208(UInt16 unicode)
{
    Handle  recHdl;
    UInt16 h, l, res = 0x0000;
    UnicodeToJis0208Rec *rec;

    if(!dbUnicodeJis0208) {return 0x0000;}
    h = (unicode & 0xff00) >> 8;
    l = (unicode & 0x00ff);

    recHdl = DmQueryRecord(dbUnicodeJis0208, h);
	rec = (UnicodeToJis0208Rec *)MemHandleLock( recHdl );
	if (rec->size > 0) {
		// データ有り
		res = rec->table[l];
	} else {
		// データなし
	}		
    MemHandleUnlock(recHdl);

	return res;
}


4. サンプルファイル

StringUtil.h,
StringUtil.c


5. 情報源

以下のサイトから情報をもらいました。ありがとうございました。


UCS と Unicode

いまでぃ 文字コードの解説