Как проверить персонажа, совместимого с 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
использовать для визуализации текста.