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