Ios 使用unicode字符时NSString中出现通用字符名错误,<;

Ios 使用unicode字符时NSString中出现通用字符名错误,<;,ios,objective-c,unicode,Ios,Objective C,Unicode,如果字符串是从包含“Hello\u003C”的文本文件中逐字读取的,我想使用Unicode版本的“ 反斜杠,那么你就可以了 NSString *text = @"Hello \\u003C"; 如果文本文件仅包含ASCII字符,则 您可以使用nsnonlossysistringencoding将“\unnn”解码为相应的Unicode字符: NSData *data = [text dataUsingEncoding:NSASCIIStringEncoding]; NSString *conv

如果字符串是从包含“Hello\u003C”的文本文件中逐字读取的,我想使用Unicode版本的“ 反斜杠,那么你就可以了

NSString *text = @"Hello \\u003C";
如果文本文件仅包含ASCII字符,则 您可以使用
nsnonlossysistringencoding
将“\unnn”解码为相应的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:通用字符名不得指定短标识符小于0024($)、0040(@)或0060(`)以外的00A0的字符,也不得指定D800到DFFF范围内的字符。)


嗯,
NSString*text=@“Some text:>”?@H2CO3可能需要一个框架来将Unicode代码点转换为常规字符。我刚刚尝试过,但对于许多不同的值,例如
\u0020
(空格)或“\u0041”(a),都会出现类似的错误。@rmaddy-是的,这很奇怪,但在标准中也有这样的定义:“通用字符名不得指定短标识符小于0024($)、0040(@)或0060(')以外的00A0的字符标准中没有说明他们为什么会提出这个限制。@114100웃 - 我引用了C11 ISO标准,第6.4.3节通用字符名,第2段约束。如果您搜索N1570,您应该在网上找到标准(草案)的PDF副本,或者您可以从ISO购买最终版本的PDF。该段有脚注:“不允许的字符是基本字符集中的字符,以及ISO/IEC 10646为控制字符保留的代码位置、字符删除和S区(保留供UTF使用)−16) “但这并不能解释为什么不允许输入十六进制形式的字符。HTH.我来试试这个-解释一下为什么我不能像示例代码中演示的那样将字符串直接放在.m文件中?@Will:据我所知,这个文本文件包含一个反斜杠字符。要将反斜杠字符放入文本字符串或NSString中,必须将其转义为“\\”。我想我不明白为什么我可以在NSString中使用一些unicode字符,但不能全部转义。这被clang接受:@“Hello\u02C4\u0502\u0024”,而不是:@“Hello\u02C4\u0502\u0024\u003C”@威尔:见CRD对问题的评论。-但是你说你从文本文件中读取字符串,所以你没有文本字符串。我这样做了,但是因为代码版本给出了警告,这激发了我的好奇心。如果在某个时候,我想内联定义它,我想更好地理解这个问题。
NSData *data = [text dataUsingEncoding:NSASCIIStringEncoding];
NSString *converted = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];
NSString *text = [NSString stringWithContentsOfFile:pathToFile encoding:NSNonLossyASCIIStringEncoding error:NULL];
"Character '<' cannot be specified by a universal character name"
"Universal character name refers to a control character"
NSString *text = [NSString stringWithFormat:@"Hello %C", 0x003C]";