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

时间:2013-06-17 19:24:19

标签: ios objective-c unicode

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

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

当我使用时:

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

'&LT;'似乎是一个特殊的角色,以及“=”和其他一些人,所以什么是插入文字'&lt;'的方式在字符串中,没有像'<'这样使用"some string <":{{1}}?

我无法控制字符串值本身,而且上面的值是内联的,用于演示目的。

3 个答案:

答案 0 :(得分:9)

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

响应错误:

"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]

示例&#39;&lt;&#39;字符:

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

有关更多选项,请参阅xcode UTF-8 literals

答案 1 :(得分:4)

如果已从包含“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转义序列都已正确转换。

答案 2 :(得分:3)

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

  

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