是否有一种简单的方法(函数、方法...)来验证用户键入的字符以查看它是否与 Mac OS Roman 兼容?我已经阅读了几十个主题,以找出 iOS 应用程序在引用CGContextShowTextAtPoint时崩溃的原因。我猜如果应用程序试图在图像上绘制一个包含 Mac OS Roman 集合中未包含的字符的字符串(即 ©),它可能会崩溃。这组有 256 个字符。我想知道除了将所选字符与这 256 个字符一一匹配之外,是否还有更好的方法?
谢谢
是否有一种简单的方法(函数、方法...)来验证用户键入的字符以查看它是否与 Mac OS Roman 兼容?我已经阅读了几十个主题,以找出 iOS 应用程序在引用CGContextShowTextAtPoint时崩溃的原因。我猜如果应用程序试图在图像上绘制一个包含 Mac OS Roman 集合中未包含的字符的字符串(即 ©),它可能会崩溃。这组有 256 个字符。我想知道除了将所选字符与这 256 个字符一一匹配之外,是否还有更好的方法?
谢谢
CGContextShowGlyphsAtPoint
您可以使用而不是绘制任何编码 ,CContextShowTextAtPoint
这样您就可以告诉它编码是什么。如果用户键入它,那么您将获得作为 NSString 的字符串,它是下面的 Unicode 字符串。可能最简单的方法是通过NSString
'sUTF8String
方法获取该用户输入的字符串的 utf8 编码。
如果您出于某种原因真的想坚持使用非常有限的 MacRoman,请使用NSString
'cStringUsingEncoding:
传入NSMacOSRomanStringEncoding
来获取 MacRoman 字符串。不过请阅读有关此内容的文档NSString
。如果用户字符串不能在 MacRoman 中无损编码,将返回 null。正如它所讨论的,您可以使用dataUsingEncoding:allowLossyConversion:
andcanBeConvertedToEncoding:
来检查。不过,请阅读讨论中cStringUsingEncoding:
关于返回字符串生命周期的注意事项。 getCString:maxLength:encoding:
可能最终成为您更好的选择。所有在. _NSString
这并不能直接回答问题,但此答案可能是您问题的解决方案。
如果你有一个NSString
, 而不是使用CGContextShowTextAtPoint
,你可以这样做:
[someStr drawAtPoint:somePoint withFont:someFont];
其中someStr
aNSString
包含用户可以键入的任何 Unicode 字符,somePoint
是 a CGPoint
,并且someFont
是UIFont
用于呈现文本的 。