高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先



*TX 06 - 中国語簡体字の変換

(96 年 2 月 9 日)

Q: どうすれば Macintosh の簡体字エンコーディングを対応する GB 標準に変換できますか。

A: 簡体字に対する Mac のエンコーディングはシフト GB2312 です。GB2312 から Mac エンコーディングへの変換を行うには、それぞれの文字に 0x8080 を加えます。また、Mac エンコーディングから GB2312 への変換を行うには、それぞれの文字から 0x8080 を差し引きします。たとえば、IDEOGRAPHIC COMMA (unicode のコードポイントは 0x3001) は、GB では 0x2122 ですが、Mac では 0xA1A2 です。 ただ一つ注意すべき文字種はローマ字です。次に、ローマ字の変換方法を具体的に説明するコードを示します。

// 文字の変換が必要な場合は true を返し、文字が 1 バイト文字
// (先頭のバイトだけが処理された文字という意味) の場合は false を返す
// (つまり、戻り値の false は、その文字がローマ字だということを意味する)
boolean MacToGB2312(unsigned char first, unsigned char second,
    unsigned short *output)
{
    if (first < 0x81) {
        *output = first;
        return false;
    } else {
        unsigned short temp;
        temp = (first - 0x80) << 8;
        temp += (second - 0x80);
        *output = temp;
        return true;
    }
}

// これで常に変換が行われ、バイトを個別に取得したり、変換が行われたか
// どうかを知らせる論理値を返す必要はない
void GB2312ToMac(unsigned short input, unsigned short *output)
{
    *output = input + 0x8080;
}
コードからもわかるように、2 バイト文字では両方のバイトをシフトする必要があります。これにより、ある文字が 2 バイト文字の一部であるのか、または 1 バイトのローマ字であるのかが明らかになります。

参考文献
* Understanding Japanese Information Processing, by Ken Lunde, published by O'Reilly & Associates.

* Ken Lunde のホームページは http://jasper.ora.com/lunde/。このホームページでは、主として日本語の文字列処理とその標準化に関する情報が公開されていますが、中国語と韓国語の情報処理に関するリンクも用意されています。