CoreFoundation打印Unicode字符

时间:2013-09-06 22:58:06

标签: c++ c macos core-foundation

我有当前的代码,它确实有效,除了事实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? printf在c字符串时处理得很好。

2 个答案:

答案 0 :(得分:5)

CFShow()仅用于调试。它故意将非ASCII转换为转义码以避免歧义。例如,“é”可以用两种方式表示:U + 00E9 LATIN SMALL LETTER E WITH ACUTE或U + 0065 LATIN SMALL LETTER E后跟U + 0301 COMBINING ACUTE ACCENT。如果CFShow()要发出UTF-8序列,您的终端可能会将其显示为“é”,并且您将无法分辨字符串中的哪个变体。这会破坏CFShow()对调试的有用性。

为什么你关心CFShow()的输出是什么,只要你明白字符串的内容是什么?

答案 1 :(得分:1)

在我看来,CFShow知道字符串是Unicode,但不知道如何为控制台格式化Unicode。我怀疑你可以做任何事情,但寻找替代方案,也许是NSLog