DATE : 2006/12/11 (Mon)
BREW には、文字型が2種類あります。1バイトの文字を表す文字型と、2バイトの文字を表すワイド文字型です。具体的には、以下に示す型で定義されています。
文字の種類 | 型 |
---|---|
1バイト文字 | char |
ワイド文字 | AECHAR(符号なし2バイト整数) |
ワイド文字も1バイト文字同様、文字列の末尾はヌル(0)です。
BREW では、文字列のエンコーディングは機種依存です。ただ、日本の機種では Shift_JIS が多いようです。
1バイト文字からワイド文字への変換を行うには、STREXPAND 関数(AEEStdLib.h)を使用します。char 値はそのままに、1バイト文字が2バイトに拡張されてワイド文字となります。2バイト文字はそのままワイド文字になります。
逆に、ワイド文字から1バイト文字への変換には WSTRCOMPRESS 関数を使用します。
以下は、STREXPAND 関数を使用するサンプルコードです。
char string = "文字列"; AECHAR wideString[4]; STREXPAND((const byte*) string, STRLEN(string), wideString, 4 * sizeof(AECHAR));
(BREW 3.1.2 API リファレンスでは、STREXPAND 関数の第1引数は const char* 型と表記されていますが、実際には const byte* 型です。ここで、byte 型は unsigned char と定義されています)
ちなみに、紛らわしい関数に STRTOWSTR 関数と WSTRTOSTR 関数があります。STRTOWSTR は文字列の1バイト1バイトを全てワイド文字に変換します。つまり2バイト文字の1文字がワイド文字2文字に変換されてしまいます。WSTRTOSTR 関数は、その逆です。
そのため、1バイト文字と2バイト文字とが混在した文字列とワイド文字列との変換には、STREXPAND 関数と WSTRCOMPRESS 関数を使用します。
また、UTF8TOWSTR という関数もあります。一見、UTF-8 から機種に合った文字エンコーディングに変換する関数のような気もしますが、実際には UTF-8 から UTF-16 に変換する関数です。