使用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范围内的字符。)