Objective C中的Unicode字符比较

16

Unicode比较是如何编码的? 我需要像下面这样进行精确测试,检查字符串中的特定字母。 以下代码出现错误:警告:指针和整数之间的比较

for (charIndex = 0; charIndex < [myString length]; charIndex++)
{
   unichar testChar = [myString characterAtIndex:charIndex];

     if (testChar == "A")  
       // do something
     if (testChar == "B")
      // do something
     if (testChar == "C")
      // do something
}
2个回答

24

对于字符字面量,请使用单引号:

if (testChar == 'A') NSLog(@"It's an A");

或者使用字符的编码点号表示:

if (testChar == 0x1e01) NSLog(@"It's an A with a ring below");
编译器将双引号视为字符串,所以将"A"构建为等效的 const char *(这会给您有关指针的错误消息)。

这并不完全正确。测试单个unichar是否为‘A’可能会导致问题——例如,如果某人写了‘Ä’,它可能会被编码为0041 0308,在这种情况下,您的代码将从0041检测到‘A’,或者它可能被编码为00C4,在这种情况下,您的代码将无法识别它。 - al45tair

0
你真正想做什么?直接进行字符比较是不寻常的。通常会使用-compare:或-isEqual:来比较两个字符串。或者使用NSScanner来分析字符串的组成部分。

好观点。我不会说比较字符是不寻常的,但循环遍历字符串中的每个字符似乎确实有些不同寻常。更多的“大局”信息肯定会有所帮助。 - Quinn Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接