CoreFoundation 打印 Unicode 字符

CoreFoundation printing Unicode characters

本文关键字:字符 Unicode 打印 CoreFoundation      更新时间:2023-10-16

>我有当前的代码,它似乎确实有效,除了 CFShow 没有将 \u00e9 的 unicode UTF8 编码转换为 é

#include <CoreFoundation/CoreFoundation.h>
int main()
{
    char *s = "This is a test of unicode support: fiancéen";
    CFTypeRef cfs = CFStringCreateWithCString(NULL, s, kCFStringEncodingUTF8);
    CFShow(cfs);
}

输出为

This is a test of unicode support: fiancu00e9e
                                        |____|
                                           > é doesn't output properly.

如何指示 CFS如何它是 unicode? printf 在 C 字符串时处理得很好。

CFShow()仅用于调试。它故意将非 ASCII 转换为转义代码以避免歧义。例如,"é"可以用两种方式表示:作为 U+00E9 拉丁小写字母 E 与锐音符或 U+0065 拉丁小写字母 E 后跟 U+0301 结合锐音符。如果CFShow()发出 UTF-8 序列,您的终端可能会将其显示为"é",并且您将无法分辨字符串中的变体。这将破坏CFShow()对调试的有用性。

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

在我看来

CFShow知道字符串是Unicode,但不知道如何为控制台格式化Unicode。 我怀疑除了寻找替代方案之外,您无能为力,也许NSLog.