加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 目标c不喜欢我的unichars?

发布时间:2020-12-14 20:03:09 所属栏目:百科 来源:网络整理
导读:当我尝试执行以下操作时,Xcode对“多字符字符包含”的抱怨: static unichar accent characters[] = { 'ā','á','?','à' }; 如果不是所有字符都是ascii,你如何制作一个字符数组?以下工作正常 static unichar accent[] = { 'a','b','c' }; 解决方法 我发现
当我尝试执行以下操作时,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本身在概念上是编码中立的;但如果您愿意,可以使用-characterAtIndex:获取unicode字符.

最后两条评论:

>如果您只想从字符串中删除重音,您可以使用这样的方法,而无需自己编写表:

-(NSString*)stringWithoutAccentsFromString:(NSString*)s
{
    if (!s) return nil;
    NSMutableString *result = [NSMutableString stringWithString:s];
    CFStringFold((CFMutableStringRef)result,kCFCompareDiacriticInsensitive,NULL);
    return result;
}

见CFStringFold的文件.
>如果您想要unicode字符进行本地化/国际化,则不应将字符串嵌入源代码中.相反,您应该使用Localizable.strings和NSLocalizedString.见here.

注意:
出于神秘的历史原因,’a’是C中的int,参见讨论here.在C中,它是一个char.但它并没有改变这样的事实:在’…’中写入多个字节是实现定义的,不推荐使用.例如,请参阅ISO C Standard 6.4.4.10.但是,在经典的Mac OS中,编写用单引号括起来的四字母代码(如“APPL”)很常见.但那是另一个故事……

另一个复杂因素是重音字母并不总是由1个字节表示;这取决于编码.在UTF-8中,它不是.在ISO-8859-1中,它是. unichar应该是UTF-16.您是否以UTF-16保存了源代码?我认为XCode的默认值是UTF-8. GCC可能会根据设置进行一些编码转换……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读