假设我的目标-C源文件中有一个字符串文本中的MUSICAL SYMBOL G CLEF符号:*。
OS字符查看器表示,在它们的术语中,CLEF是UTF8 F0 9D 84 9E和Unicode 1D11E(D834+DD1E)。
在进行了一些模糊处理之后,并使用了t何ICU UNICODE演示页面,我确实得到了以下代码:
NSString *uni=@"\U0001d11e";
NSString *uni2=[[NSString alloc] initWithUTF8String:"\xF0\x9D\x84\x9E"];
NSString *uni3=@"";
NSLog(@"unicode: %@ and %@ and %@",uni, uni2, uni3);我的问题:
@"\U0001d11e部件是UTF-32吗?发布于 2011-04-16 23:13:58
uni3中这样做,但遗憾的是,这就是不建议。否则,我更喜欢uni中的方法,而不是uni2中的方法。另一种选择是[NSString stringWithFormat:@"%C", 0x1d11e]。发布于 2011-04-17 01:22:47
回答你的问题(同样的顺序):
@"\U0001d11e是ISO 10646字符集中该字符的32位Unicode代码点。通用字符名称(来自WG14/N 1256 C0X草稿,CLANG紧随其后):
通用字符名可用于标识符、字符常量和字符串文本,以指定不在基本字符集中的字符。 通用字符名称\Unnnnnnnn指定其八位短标识符(如ISO/IEC 10646所指定)为nnnnnnnn),通用字符名称\ nnnn指定其四位短标识符为nnnn(且其八位短标识符为0000nnnn)的字符。
因此,您可以以自然、混合的方式生成您的字符或字符串:
char *utf8CStr =
"May all your CLEF's \xF0\x9D\x84\x9E be left like this: \U0001d11e";
NSString *uni4=[[NSString alloc] initWithUTF8String:utf8CStr];\Unnnnnnnn表单允许您选择任何Unicode代码点,这与字符查看器左下角的"Unicode“字段的值相同。编译器适当地处理\Unnnnnnnn源文件中的C99直接条目。请注意,只有两个选项:\unnnn (向默认代码页偏移256个字符)或\Unnnnnnnn (任何Unicode代码点的完整32位字符)。如果您没有使用所有4位或全部8位数字或\U或\u,则需要用0来填充左边的位置。
相同字符串文本中的\xF0\x9D\x84\x9E形式更有趣。这是插入相同字符的原始UTF-8编码.一旦传递给initWithUTF8String方法,但是文字和编码的文字以编码的UTF-8结尾。
可以说,它可能违反了以这种方式使用原始字节的第5.1.1.2条130。考虑到一个原始的UTF-8字符串将以类似的方式编码,我认为您还可以。
发布于 2011-04-16 23:10:17
\U0001d11e匹配G clef字符的unicode代码点。一个字符的UTF-32形式与它的代码点相同,所以如果你想的话,你可以把它想成UTF-32。这是到音乐符号用unicode表的链接。https://stackoverflow.com/questions/5690172
复制相似问题