转义 iOS 的 Unicode 字符

Posted

技术标签:

【中文标题】转义 iOS 的 Unicode 字符【英文标题】:Escape Unicode Characters for iOS 【发布时间】:2014-06-12 22:03:24 【问题描述】:

我想在我的应用程序中使用一些 Unicode 排列。我无法正确地转义它们以供使用。

例如这个 Unicode 序列:????

如果我使用在线工具逃避它,我会得到:\ud83c\udd70

但是对于编译器来说,这当然是一个无效的序列:

var str = NSString.stringWithUTF8String("\ud83c\udd70")

如果我这样做:

var str = NSString.stringWithUTF8String("\ud83c")

我收到一个错误“无效的 Unicode 标量”

我正在尝试使用这些 Unicode“字体”: http://www.panix.com/~eli/unicode/convert.cgi?text=abcdefghijklmnopqrstuvwxyz

如果我查看本网站的源代码,我会看到如下序列:

&#x1D552

努力思考什么是使用/转义 unicode 的“正确”方式。

并且只需要想办法让他们在 ios 上工作。

有什么想法吗?

【问题讨论】:

var str = \uD83D\uDD70" 会发生什么? 有没有办法知道什么是有效的,什么是无效的以及如何正确转换?我想学习如何正确转换任何 unicode 字符 - 了解其背后的“原因” 【参考方案1】:

\ud83c\udd70 是一个 UTF-16 代理对,它编码 unicode 字符? (U+1F170)。 Swift 字符串文字不使用 UTF-16,因此转义序列没有意义。但是,由于 1F170 有五个数字,因此您不能使用 \uXXXX 转义序列(它只接受四个十六进制数字)。相反,使用\UXXXXXXXX 序列(注意大写U),它接受八个:

var str = "\U0001F170" // returns "?"

您也可以将字符本身粘贴到您的字符串中:

var str = "?" // returns "?"

【讨论】:

Nathan - 你是如何计算出 8 位版本的 - 我希望能够自己转换这些 @Spentak 我使用了字符查看器。如果将字符粘贴到搜索字段并单击结果,它将在右侧栏中显示 Unicode 代码点。 (screenshot) @nathan 感谢角色查看器的提示!【参考方案2】:

Swift 是一个早期的 Beta,在很多方面都存在问题。这个问题是一个 Swift 错误。

let ringAboveA:       String = "\u0041\u030A" is Å and is accepted  
let negativeSquaredA: String = "\uD83D\uDD70" is ? and produces an error  

两者都是被 Objective-C 接受的分解的 UTF16 字符。不同之处在于组合字符?在平面1中。

注意:要获取 UTF32 代码点,请使用 OSX Character Viewer 或代码 sn-p:

NSLog(@"utf32: %@", [@"?" dataUsingEncoding:NSUTF32BigEndianStringEncoding]);

utf32:

要在 Apple 菜单中获取字符查看器,请转到“系统偏好设置”、“键盘”、“键盘”选项卡并选中复选框:“在菜单栏中显示键盘和字符查看器”。 “字符视图”项将位于日期左侧的菜单栏中。

输入人物后右键(控制)点击收藏中的人物即可复制搜索结果。

复制信息: ? 负平方拉丁文大写字母 A Unicode:U+1F170(U+D83C U+DD70),UTF-8:F0 9F 85 B0

更好的是:在左侧列表中添加 unicode 并选择它。

【讨论】:

您好,我需要将非英文字符转换为 Unicode,例如(ud100 或 fh123..),如何快速完成 在字面上使用\ud100 或在查看器中输入d 1 0 0 并获得턀。如果评论是代理对,请参阅@nathan 的答案。我不明白:评论中的fh123.. 我有中文文本,我需要将该文本形成为 Unicode,如 \u2345 .... 并发送到服务器,我该如何实现?

以上是关于转义 iOS 的 Unicode 字符的主要内容,如果未能解决你的问题,请参考以下文章

ios unicode

如何将 unicode 字符串转换为其 unicode 转义?

取消转义字符串中的 unicode

六位 unicode 转义值比较

python2模块中unicode中的转义控制字符

PHP:恢复转义的Unicode字符[重复]