带有 stringWithUTF8String 的“不完整的通用字符名称”

Posted

技术标签:

【中文标题】带有 stringWithUTF8String 的“不完整的通用字符名称”【英文标题】:"incomplete universal character name" with stringWithUTF8String 【发布时间】:2010-03-26 10:13:43 【问题描述】:

当我尝试将表单 utf-8 字符串转换为 NSString 时:

NSString *s = [NSString stringWithUTF8String:"\U0627\U0644\U0641\U0631\U0646"];
NSLog(@"%@", s);

我得到编译错误:

incomplete universal character name

请注意,有时它可以正常工作:

NSString *UAE = [NSString stringWithUTF8String:"\U0627\U0644\U0641\U0631\U0646"];
    NSLog(@"%@", UAE);

和输出:

الامارات

那为什么会这样呢?请帮忙。

【问题讨论】:

天啊,这是 Xcode 中的一个错误。对于某些国家/地区来说,非 ASCII 仍然很难获得 ;-) 【参考方案1】:

\U 和 \u 不是一回事。 \U 转义需要 8 个(十六进制)数字而不是 4 个。

这应该可行:

NSString *s = [NSString stringWithUTF8String:"\u0627\u0644\u0641\u0631\u0646"];

【讨论】:

Apple 在为 UI 测试记录事件时实际上会出现此错误。 (至少从 Xcode 7.3 开始)【参考方案2】:

不完整的通用字符名称意味着您缺少您尝试编写的 utf8 字符之一。

UTF8 跨越从 1 字节符号到 4 字节符号,可能您的其中一个符号比您写的要长,并且您缺少 1 个字节或这样的..

【讨论】:

非常感谢 Jack,但是,我试图从我无法控制的 Web 服务中解析 UTF-8 字符串。 utf-8 字符串中的空格是否与问题有关。我的意思是在我的情况下如何表示空格字符?再次感谢 如果字符串来自 web 服务,你是如何得到编译时错误的? 实际上我从返回的字典中手动复制了 utf-8 字符串并使用方法 -stringWithUTF8String 对其进行测试,这是我得到编译时错误的时候

以上是关于带有 stringWithUTF8String 的“不完整的通用字符名称”的主要内容,如果未能解决你的问题,请参考以下文章

obj -c IOS内存管理

转义 iOS 的 Unicode 字符

iOS中常见的一些宏

在 iPhone 中使用 UTF-8 编码和解码

升级到 Xcode 5 后,objc_msgSend 在哪里?

如何在char数组和NSString之间进行转换