首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode UTF-8字面值

Xcode UTF-8字面值
EN

Stack Overflow用户
提问于 2011-04-16 22:50:27
回答 4查看 16K关注 0票数 21

假设我的目标-C源文件中有一个字符串文本中的MUSICAL SYMBOL G CLEF符号:*。

OS字符查看器表示,在它们的术语中,CLEF是UTF8 F0 9D 84 9E和Unicode 1D11E(D834+DD1E)

在进行了一些模糊处理之后,并使用了t何ICU UNICODE演示页面,我确实得到了以下代码:

代码语言:javascript
复制
NSString *uni=@"\U0001d11e";
NSString *uni2=[[NSString alloc] initWithUTF8String:"\xF0\x9D\x84\x9E"];
NSString *uni3=@"";
NSLog(@"unicode: %@ and %@ and %@",uni, uni2, uni3);

我的问题:

  1. 有可能简化我做UTF-8字面值的方式吗?这在我看来很疯狂。
  2. @"\U0001d11e部件是UTF-32吗?
  3. 为什么从字符查看器中剪切和粘贴剪纸实际上是有效的?我以为目标-C文件必须是UTF-8?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-16 23:13:58

  1. 我更喜欢您在uni3中这样做,但遗憾的是,这就是不建议。否则,我更喜欢uni中的方法,而不是uni2中的方法。另一种选择是[NSString stringWithFormat:@"%C", 0x1d11e]
  2. 它是一个“通用字符名”,在C99中引入(第6.4.3节),并从OSX10.5导入到目标C中。从技术上讲,这不需要给您UTF-8 (这取决于编译器),但在实践中,UTF-8可能是您将得到的。
  3. 源代码文件的编码可能是UTF-8,符合运行时的要求,所以一切都正常。也有可能源文件是UTF-16或UTF-32,编译器在编译它时做的是对的。尽管如此,苹果并不推荐这样做。
票数 11
EN

Stack Overflow用户

发布于 2011-04-17 01:22:47

回答你的问题(同样的顺序):

  1. 为什么要选?Xcode在默认设置中使用C99。请参考通用字符名称上的C0X规范草案6.4.3。见下文。
  2. 更严格地说,@"\U0001d11eISO 10646字符集中该字符的32位Unicode代码点。
  3. 我不指望这种行为能奏效。您应该绝对,积极,毫无疑问,所有字符在您的源文件是7位ASCII。对于字符串文本,使用编码,或者最好使用合适的外部资源来处理二进制数据。

通用字符名称(来自WG14/N 1256 C0X草稿,CLANG紧随其后):

通用字符名可用于标识符、字符常量和字符串文本,以指定不在基本字符集中的字符。 通用字符名称\Unnnnnnnn指定其八位短标识符(如ISO/IEC 10646所指定)为nnnnnnnn),通用字符名称\ nnnn指定其四位短标识符为nnnn(且其八位短标识符为0000nnnn)的字符。

因此,您可以以自然、混合的方式生成您的字符或字符串:

代码语言:javascript
复制
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字符串将以类似的方式编码,我认为您还可以。

票数 8
EN

Stack Overflow用户

发布于 2011-04-16 23:10:17

  1. 您也可以在字符串文本中写入clef字符: NSString *uni2=[NSString alloc initWithUTF8String:“”;
  2. \U0001d11e匹配G clef字符的unicode代码点。一个字符的UTF-32形式与它的代码点相同,所以如果你想的话,你可以把它想成UTF-32。这是到音乐符号用unicode表的链接。
  3. 你的档案可能是UTF-8。G是一个有效的UTF8字符-请查看您的文件的十六进制输出: 00 4e 53 53 74 72 69 6e 67 20 2a 75 6e 69 33 3d 40区NSString *uni3=@| 10 22 f0 9d 84 9b 0a 20 4e 534 c 6f 67 28区“.”;NSLog(X) 如您所见,正确的UTF-8表示该字符就在您期望的文件中。使用其他方法之一并尝试将源文件保持在ASCII范围内可能更安全。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5690172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档