使用unicode字符时,NSString中的通用字符名称错误,<

我想在NSString中使用Unicode版本的'<',但编译器会产生错误:

"Character '<' cannot be specified by a universal character name" 

我用的时候:

 NSString *text = @"Some Text: \u003C"; 

‘<'似乎是一个特殊字符,以及“=”和其他一些字符,所以在字符串中插入文字'<'的方法是什么,而不像字面意思那样使用'<'"some string <"

我无法控制字符串值本身和上面的值,因为内联是出于演示目的。

我不相信编译器错误已得到解决。

为了回应错误:

 "Character '<' cannot be specified by a universal character name" "Universal character name refers to a control character" 

似乎您不能将\U000000xx文字语法用于许多2字节ASCII字符,但以下情况除外:

  • \U00000024
  • \U00000040
  • \U00000060
  • \U000000A0\U000000FF

一个简单的解决方法是使用[NSString stringWithFormat:@"%C", 0x000000xx]

带有'<'字符的示例:

 NSString *text = [NSString stringWithFormat:@"Hello %C", 0x003C]"; 

有关更多选项,请参阅xcode UTF-8文字 。

如果字符串已经从包含“Hello \ u003C”的文本文件中读取,并带有逐字反斜杠,那么您将拥有

 NSString *text = @"Hello \\u003C"; 

如果文本文件只包含ASCII字符,那么您可以使用NSNonLossyASCIIStringEncoding “\ uNNNN”解码为相应的Unicode字符的事实:

 NSData *data = [text dataUsingEncoding:NSASCIIStringEncoding]; NSString *converted = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding]; 

补充:你可能可以直接从文件中创建字符串

 NSString *text = [NSString stringWithContentsOfFile:pathToFile encoding:NSNonLossyASCIIStringEncoding error:NULL]; 

并且所有Unicode转义序列都已正确转换。

clang遵循C标准,由于某种原因不允许这样做:

C99 6.4.3p2:通用字符名称不应指定短标识符小于00A0而不是0024($),0040(@)或0060(`)的字符,也不得指定D800到DFFF范围内的字符。)