3

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

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

当我使用:

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

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

我无法控制字符串值本身,上面的值作为 in-line 是出于演示目的。

4

3 回答 3

11

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

针对错误:

"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 文字

于 2014-12-29T22:43:25.503 回答
4

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

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

NSNonLossyASCIIStringEncoding如果文本文件仅包含 ASCII 字符,那么您可以使用将“\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 转义序列都已正确转换。

于 2013-06-17T20:09:48.293 回答
3

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

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

于 2016-09-01T14:39:15.013 回答