Отображение «специальных» символов из других кодировок в UILabel или аналогичных - PullRequest
0 голосов
/ 15 августа 2011

Я хотел бы иметь возможность имитировать терминал на моем iPhone, чтобы играть в такие игры, как Nethack, используя примитивную графику, которая мне нравилась на реальном терминале DEC.Nethack позволяет выбирать DECgraphics для vt-совместимых терминалов или IBMGraphics для поддержки кодовой страницы 437.

Я знаю, что эти специальные графические символы генерируются строками, посылаемыми на терминал (vt100.net содержит огромное количество информации, включая руководства для терминала и тестовые программы).Я могу получать и интерпретировать эти строки, но мне нужно иметь возможность воспроизводить и отображать эти символы в UIView.

Похоже, что kCFStringEncodingMacVT100 и kCFStringEncodingDOSLatinUS являются ключами к головоломке.Вот небольшой частичный код, показывающий, что я пытался сделать, чтобы получить символы «специальных символов» на UILabel:

            UInt8 c = some value...
            NSStringEncoding stringEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingMacVT100);
            NSData *charData = [NSData dataWithBytes:&c length:1];
            NSString *charString = [[NSString alloc] initWithData:charData encoding:stringEncoding];
            label.font = [UIFont fontWithName:@"Courier New" size:20.f];
            label.text = charString;

Я пробовал значения c от 0 до 255. Я могу отображать символы из пробела в '~ 'со всеми ожидаемыми вещами между использованием этого кода, но нет углов или других символов строки вообще.Когда нет символов для отображения, charString равен nil.

Теперь я почти уверен, что в TTF Courier New есть эти символы - на моем Mac я могу играть в Nethack с установленным в Courier New шрифтом терминала и могуустановите DECgraphics и дисплей в порядке.

Итак, вопросы:

  • что не так с кодом выше?
  • какие свободно доступные моноширинные шрифты TrueType поддерживаютспециальные символы DEC и / или кодовая страница 437?
  • как можно проверить TTF, как только он у вас есть, чтобы убедиться, что эти глифы есть?
  • как вы можете отобразить эти глифы в UILabel илипохожи?

(Я не хочу использовать какой-либо из доступных графических наборов плиток, они мне не нравятся. Я знаю, что уже есть как минимум два Nethacks, доступных бесплатно, но ни у одного нет простогоИнтерфейс клавиатуры Я хочу, я нахожу всплывающее окно для всего подхода очень медленным и разочаровывающим. Я знаю, что это не легкий проект. И я мог бы хотеть Angband одиндень.)

1 Ответ

3 голосов
/ 15 августа 2011

Большинство (все?) Глифов в CP437 имеют соответствующие кодовые точки в стандарте Unicode, как подробно описано в этой википедии статья .

Например, чтобы отобразить клуб, выможно сделать следующее.Работает со шрифтом по умолчанию UILabel:

UniChar club = 0x2663;
NSString *clubString = [NSString stringWithCharacters:&club length:1];
[label setText:clubString];
...