我有当前代码,除了CFShow不会将\u00e9的Unicode UTF8编码转换为é之外,它似乎确实可以工作
#include <CoreFoundation/CoreFoundation.h>
int main()
{
char *s = "This is a test of unicode support: fiancée\n";
CFTypeRef cfs = CFStringCreateWithCString(NULL, s, kCFStringEncodingUTF8);
CFShow(cfs);
}
输出为
This is a test of unicode support: fianc\u00e9e
|____|
> é doesn't output properly.
如何指示CFShow它是unicode?当它是c字符串时,printf可以很好地处理它。
最佳答案
CFShow()
仅用于调试。为了避免歧义,它故意将非ASCII转换为转义代码。例如,“é”可以用两种方式表示:U + 00E9带小号的拉丁文小写字母E或U + 0065带有小号的拉丁文小写字母E,再加上U + 0301组合小写字母。如果CFShow()
发出UTF-8序列,则您的终端可能会将其显示为“é”,并且您将无法辨别字符串中的哪个变体。那会破坏CFShow()
调试的有用性。
只要知道字符串的内容,为什么还要关心CFShow()
的输出?
关于c++ - CoreFoundation打印Unicode字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18667799/