CoreFoundation打印Unicode字符
我有当前的代码,它似乎工作,除了事实CFShow没有将\ u00e9的unicode UTF8编码转换为é
#include 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是ac字符串时处理得很好。
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()
的输出只要你理解字符串的内容是什么?
在我看来, CFShow
知道字符串是Unicode,但不知道如何格式化控制台的Unicode。 我怀疑你可以做任何事情,但寻找替代品,也许是NSLog
。