逃离iOS的Unicode字符

时间:2014-06-12 22:03:24

标签: ios unicode swift

我想在我的应用中使用一些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

挣扎着绕着什么是使用/ escape unicode的“正确”方式。

只需要找到一种方法让他们在iOS上工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

var str = "" // returns ""

答案 1 :(得分:1)

斯威夫特是一个早期的Beta,在许多方面被打破。这个问题是一个Swift错误。

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

enter image description here

两者都是Objective-C接受的分解的UTF16字符。区别在于组合字符在平面1中。

注意:要获取UTF32代码点,请使用OSX Character Viewer或代码片段:

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

utf32:< 0001f170>

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

enter image description here

输入字符右侧(控制)后,单击收藏夹中的字符以复制搜索结果。

复制信息:

负面的拉丁文大写字母A
Unicode:U + 1F170(U + D83C U + DD70),UTF-8:F0 9F 85 B0

更好的是:在左侧列表中添加unicode并选择它 enter image description here