确定UTF16值是libunistring中的代理

时间:2015-06-26 20:04:41

标签: c unicode

GNU libunistring是否有API来确定某个值是否为UTF16代理?我是这个图书馆的新手,找不到一个。有人可以帮忙吗?

2 个答案:

答案 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范围内。所以很容易自己检查一下。