GNU libunistring是否有API来确定某个值是否为UTF16代理?我是这个图书馆的新手,找不到一个。有人可以帮忙吗?
答案 0 :(得分:3)
也许uc_general_category()
正是您所寻找的。如果你传递一个UTF-16代码单元,编译器会将16位的值扩展到32位,函数会将其解释为一个代码点。代码点U + D800 - U + DFFF仅为代理项保留,因此该函数应返回任何UTF-16代理代码单元UC_SURROGATE
。非代理代码单元与BMP中的相应代码点具有相同的数值(代理只需要BMP之外的代码点),因此该函数将返回其他内容。
答案 1 :(得分:2)
在代理对的两个16位代码单元中,"高"代理在0xD800..0xDBFF和"低"范围内。代理在0xDC00..0xDFFF范围内。所以很容易自己检查一下。