0

私は誰かからコードを読んでいますが、たまたま次のようなコードを見ました。

コメントによると、この機能はConvert a UCS character to an UTF-8 string. しかし、ucs 文字とは何ですか? ucs を unicode に変換する規則は何ですか? ドキュメントはどこにありますか?

/*
 * Convert a UCS character to an UTF-8 string
 *
 * Returns the string length of the result
 */
size_t
tUcs2Utf8(ULONG ulChar, char *szResult, size_t tMaxResultLen)
{
    if (szResult == NULL || tMaxResultLen == 0) {
        return 0;
    }

    if (ulChar < 0x80 && tMaxResultLen >= 2) {
        szResult[0] = (char)ulChar;
        szResult[1] = '\0';
        return 1;
    }
    if (ulChar < 0x800 && tMaxResultLen >= 3) {
        szResult[0] = (char)(0xc0 | ulChar >> 6);
        szResult[1] = (char)(0x80 | (ulChar & 0x3f));
        szResult[2] = '\0';
        return 2;
    }
    if (ulChar < 0x10000 && tMaxResultLen >= 4) {
        szResult[0] = (char)(0xe0 | ulChar >> 12);
        szResult[1] = (char)(0x80 | (ulChar >> 6 & 0x3f));
        szResult[2] = (char)(0x80 | (ulChar & 0x3f));
        szResult[3] = '\0';
        return 3;
    }
    if (ulChar < 0x200000 && tMaxResultLen >= 5) {
        szResult[0] = (char)(0xf0 | ulChar >> 18);
        szResult[1] = (char)(0x80 | (ulChar >> 12 & 0x3f));
        szResult[2] = (char)(0x80 | (ulChar >> 6 & 0x3f));
        szResult[3] = (char)(0x80 | (ulChar & 0x3f));
        szResult[4] = '\0';
        return 4;
    }
    szResult[0] = '\0';
    return 0;
} /* end of tUcs2Utf8 */
4

1 に答える 1

0

Universal Character Set はISO 標準です。Unicode と同じ文字を定義するため、文字変換の必要はありません。UCS のすべてのバージョンは、基本的に Unicode 標準の特定のバージョンの小さなサブセットです。新しい文字が最初に Unicode に追加され、UCS が Unicode と同期されることがよくあります。Unicode 標準の付録 Cには、異なるバージョン間の関係を示す表が含まれています。

また、投稿したコードは、非標準の上限である 0x200000 を使用していることにも注意してください。これは 0x110000 に変更する必要があります。

于 2016-01-18T14:57:14.383 に答える