CoreFoundation печать символов Юникода

У меня есть текущий код, и он, кажется, работает, за исключением того факта, что CFShow не переводит кодировку UTF8 в Юникоде \ u00e9 палец

#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, что это юникод? printf прекрасно справляется, когда это строка c.

1

Решение

CFShow() только для отладки. Это намеренное преобразование не ASCII в escape-коды, чтобы избежать двусмысленности. Например, «é» может быть выражено двумя способами: как U + 00E9 ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО E С ОСТРОМ или как U + 0065 ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО Е, за которым следует U + 0301 КОМБИНИРОВАНИЕ ОСТРОГО АКЦЕНТА. Если CFShow() Если бы они испускали последовательность UTF-8, ваш терминал, скорее всего, представил бы ее как «é», и вы не смогли бы определить, какой вариант был в строке. Это подорвало бы полезность CFShow() для отладки.

Почему тебя волнует, что на выходе CFShow() до тех пор, пока вы понимаете, что это за строка?

5

Другие решения

Мне кажется, что CFShow знает, что строка является Unicode, но не знает, как форматировать Unicode для консоли. Я сомневаюсь, что вы можете сделать что-нибудь, но искать альтернативу, возможно, NSLog,

1