objective-c – 目标c不喜欢我的unichars?
当我尝试执行以下操作时,Xcode对“多字符字符包含”的抱怨:
static unichar accent characters[] = { 'ā','á','?','à' }; 如果不是所有字符都是ascii,你如何制作一个字符数组?以下工作正常 static unichar accent[] = { 'a','b','c' }; 解决方法 我发现最接近的工作是将特殊字符转换为十六进制,即这有效: static unichar accent characters[] = { 0x0100,0x0101,0x0102 }; 解决方法
并不是说Objective-C不喜欢它,而是C不这样做.常量’c’用于具有1个字节的char,而不是具有2个字节的unichar. (有关详细信息,请参阅下面的注释.)
没有完全支持的方式来表示unichar常数.您可以使用 char* s="ü"; 在UTF-8编码的源文件中获取unicode C-string,或 NSString* s=@"ü"; 在UTF-8编码的源文件中获取NSString. (在10.5之前这是不可能的.对iPhone来说没问题.) NSString本身在概念上是编码中立的;但如果您愿意,可以使用 最后两条评论: >如果您只想从字符串中删除重音,您可以使用这样的方法,而无需自己编写表: -(NSString*)stringWithoutAccentsFromString:(NSString*)s { if (!s) return nil; NSMutableString *result = [NSMutableString stringWithString:s]; CFStringFold((CFMutableStringRef)result,kCFCompareDiacriticInsensitive,NULL); return result; } 见CFStringFold的文件. 注意: 另一个复杂因素是重音字母并不总是由1个字节表示;这取决于编码.在UTF-8中,它不是.在ISO-8859-1中,它是. unichar应该是UTF-16.您是否以UTF-16保存了源代码?我认为XCode的默认值是UTF-8. GCC可能会根据设置进行一些编码转换…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |