【问题标题】:convert ucs(Universal Character Set) character to unicode?将ucs(通用字符集)字符转换为unicode?
【发布时间】:2016-04-23 10:50:54
【问题描述】:

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

根据评论,这个功能是给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 */

【问题讨论】:

  • 真的吗? this 没有帮助?
  • @SouravGhosh,我可以阅读这段代码,但这是为什么呢?所以我想知道转换之间的规则是什么
  • 在经过测试且存在稳定替代方案时,请不要滚动您自己的代码。如果这是特定于 Windows 的,您可以使用 MultibyteToWideChar 和/或 WideCharToMultibyte。否则你可以使用 ICU。
  • 函数名有误导性。 UCS-2 代码单元仅涵盖 U+0000 到 U+FFFF 的范围。这个函数实际上所做的是将一个完整的 Unicode 字符通过其代码点编号(U+0000 到 U+10FFFF)转换为 UTF-8 字节序列。
  • @bobince:认为函数名中的 2 是“to”而不是“two”,即结果是函数名称选择不当。

标签: c unicode unicode-string ucs


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2011-05-14
    • 1970-01-01
    相关资源
    最近更新 更多