the*_*olf 21 unicode xcode objective-c
假设我MUSICAL SYMBOL G CLEF在Objective-C源文件中的字符串文字中有符号:****.
OS X字符查看器表示CLEF 在其术语中是UTF8 F0 9D 84 9E和Unicode 1D11E(D834+DD1E).
经过一些困难,并使用ICU UNICODE演示页面,我确实得到以下代码:
NSString *uni=@"\U0001d11e";
NSString *uni2=[[NSString alloc] initWithUTF8String:"\xF0\x9D\x84\x9E"];
NSString *uni3=@"";
NSLog(@"unicode: %@ and %@ and %@",uni, uni2, uni3);
Run Code Online (Sandbox Code Playgroud)
我的问题:
@"\U0001d11eUTF-32吗?Ano*_*mie 11
uni3,但遗憾的是不建议这样做.如果做不到这一点,我宁愿方法uni,以在uni2.另一种选择是[NSString stringWithFormat:@"%C", 0x1d11e].您的问题的答案(相同的顺序):
为什么选择?xcode在默认设置中使用C99.请参阅关于通用字符名称的C0X规范草案6.4.3.见下文.
从技术上讲,它@"\U0001d11e是ISO 10646字符集中该字符的32位Unicode代码点.
我不会指望这种行为有效.毫无疑问,您应该毫无疑问地将源文件中的所有字符都设置为7位ASCII.对于字符串文字,请使用编码,或者最好使用能够处理二进制数据的合适外部资源.
通用角色名称(来自WG14/N1256 C0X草案,CLANG相当顺利):
通用字符名称可用于标识符,字符常量和字符串文字中,以指定不在基本字符集中的字符.
通用字符名称\ Unnnnnnnn指定其八位短标识符(由ISO/IEC 10646指定)为nnnnnnnn的字符.类似地,通用字符名称\ unnnn指定其四位短标识符为nnnn的字符(其中八个-digit short identifier是0000nnnn).
因此,您可以以自然,混合的方式制作您的角色或弦乐:
char *utf8CStr =
"May all your CLEF's \xF0\x9D\x84\x9E be left like this: \U0001d11e";
NSString *uni4=[[NSString alloc] initWithUTF8String:utf8CStr];
Run Code Online (Sandbox Code Playgroud)
该\Unnnnnnnn表格允许您选择任何Unicode代码点,这是相同的值在角色阅读器左下角的"统一"字段.\UnnnnnnnnC99源文件中的直接输入由编译器适当处理.请注意,只有两个选项:\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字符串编码类似,我认为你没问题.
| 归档时间: |
|
| 查看次数: |
15170 次 |
| 最近记录: |