Как проверить персонажа, совместимого с MacRoman

Есть ли простой способ (функция, метод...) проверки символа, который пользователь печатает, чтобы увидеть, совместим ли он с Mac OS Roman? Я прочитал несколько десятков тем, чтобы выяснить, почему происходит сбой приложения iOS в отношении CGContextShowTextAtPoint. Я предполагаю, что приложение может аварийно завершить работу, если оно попытается нарисовать на изображении строку (например, ©), содержащую символ, который не включен в римский набор Mac OS. В этом наборе 256 символов. Интересно, есть ли лучший способ, кроме как сопоставить выбранный символ один за другим с этими 256 символами?

Спасибо

2 ответа

Решение

Вы можете прочитать https://developer.apple.com/library/mac/#documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_text/dq_text.html более детальное чтение.

Вы можете нарисовать любую кодировку используя CGContextShowGlyphsAtPoint вместо CContextShowTextAtPoint так что вы можете сказать, что это за кодировка. Если пользователь введет его, вы получите строку в виде строки NSString, которая является строкой Unicode внизу. Вероятно, самым простым будет получить кодировку utf8 для этой введенной пользователем строки через NSString"s UTF8String метод.

Если по какой-то причине вы действительно хотите придерживаться очень ограниченного MacRoman, используйте NSString"s cStringUsingEncoding: проходя в NSMacOSRomanStringEncoding чтобы получить строку MacRoman. Прочитайте документацию по этому вопросу в NSString хоть. Возвращает ноль, если пользовательская строка не может быть закодирована в MacRoman без потерь. Как это обсуждается, вы можете использовать dataUsingEncoding:allowLossyConversion: а также canBeConvertedToEncoding: Проверять. Прочитайте предостережения в обсуждении для cStringUsingEncoding: о жизненном цикле возвращаемых строк. getCString:maxLength:encoding: может оказаться лучшим выбором для вас. Все обсуждаемое в документации класса для NSString,

Это не дает прямого ответа на вопрос, но этот ответ может стать решением вашей проблемы.

Если у вас есть NSString, Вместо того, чтобы использовать CGContextShowTextAtPoint, ты можешь сделать:

[someStr drawAtPoint:somePoint withFont:someFont];

где someStr является NSString содержит любые символы Юникода, которые может ввести пользователь, somePoint это CGPoint, а также someFont это UIFont использовать для визуализации текста.

Другие вопросы по тегам