У меня есть текущий код, и он, кажется, работает, за исключением того факта, что 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.
CFShow()
только для отладки. Это намеренное преобразование не ASCII в escape-коды, чтобы избежать двусмысленности. Например, «é» может быть выражено двумя способами: как U + 00E9 ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО E С ОСТРОМ или как U + 0065 ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО Е, за которым следует U + 0301 КОМБИНИРОВАНИЕ ОСТРОГО АКЦЕНТА. Если CFShow()
Если бы они испускали последовательность UTF-8, ваш терминал, скорее всего, представил бы ее как «é», и вы не смогли бы определить, какой вариант был в строке. Это подорвало бы полезность CFShow()
для отладки.
Почему тебя волнует, что на выходе CFShow()
до тех пор, пока вы понимаете, что это за строка?
Мне кажется, что CFShow
знает, что строка является Unicode, но не знает, как форматировать Unicode для консоли. Я сомневаюсь, что вы можете сделать что-нибудь, но искать альтернативу, возможно, NSLog
,