将ucs(通用字符集)字符转换为unicode?

标签 c unicode unicode-string ucs

我正在阅读某人的代码,我碰巧看到了如下代码。

根据注释,该函数的作用是将UCS字符转换为UTF-8字符串。但是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 */

最佳答案

通用字符集是ISO standard 。它定义了 the same characters as Unicode ,所以不需要进行字符转换。 UCS 的每个版本本质上都是 Unicode 标准特定版本的一个小子集。新字符首先添加到 Unicode,并且 UCS 经常与 Unicode 同步。 Appendix C Unicode 标准包含一个表格,显示不同版本之间的关系。

另请注意,您发布的代码使用非标准上限 0x200000。应将其更改为 0x110000。

关于将ucs(通用字符集)字符转换为unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34851813/

相关文章:

c - c语言中这两种语法有什么区别?

c - SNTP 客户端版本 4

c - 如何获取存储在双引号内的值

java如何写0x13 unicode字符?

c - 如果我强制第一个和最后一个为 10 长度字符串中的字母,如何强制用户在字符串中仅插入数字?示例 S2351566A

c++ - std::wstring 导致堆内存分配崩溃

php - MySQL - 从 PHP 插入日语 - 编码问题

v8 - V8 是否支持 Unicode?

java - 在java中使用unicode创建HashMap

ios - iOS中如何识别用户的语言?