我目前正在开发一个Objective C程序,它接收UTF-8字符作为字符串的输入,如"U+0008"。这些字符串的类型是NSString。现在我需要将表示该字符的字符串转换为相应的UniChar (0x0008)。
你知道一种优雅的方法吗?
谢谢!佩德罗
如果你有一个形式为@"U+xxxx"
的NSString
,其中x是十六进制数字,那么以下是两种获取值的方法,每种方法的"优雅"都在旁观者的眼中:
a)使用NSScanner
。方法scanString:intoString
可用于检查U+
,方法scanHexInt:
读取十六进制值,方法isAtEnd
检查十六进制值后没有任何剩余。此方法不限制十六进制数最多为四位。
b)使用sscanf
或strtol
。这些是c级api,您可以使用UTF8String
从NSString
获得c字符串。使用scanf
,您可以检查U+
,并在一行中读取十六进制数字,设置最大位数-如果这是您对"优雅"的定义。然而,检查所有输入是否被消耗需要一点思考。
还有许多其他方法可以做到这一点,从自己滚动到使用正则表达式(NSRegularExpression
)来检查格式并一次性提取4个十六进制数字,准备转换为整数。
注意,如果你看到4个十六进制数字,那么你有一个16位的值,更像UTF-16而不是UTF-8。