我想在我的应用中使用一些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
如果我查看本网站的来源,我会看到如下序列:
𝕒
挣扎着绕着什么是使用/ escape unicode的“正确”方式。
只需要找到一种方法让他们在iOS上工作。
有什么想法吗?
答案 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)
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或代码片段:
NSLog(@"utf32: %@", [@"" dataUsingEncoding:NSUTF32BigEndianStringEncoding]);
utf32:< 0001f170>
要在Apple菜单中获取角色查看器,请转到"系统偏好设置","键盘","键盘"选项卡并选中复选框:"显示键盘&菜单栏中的角色查看器"。 "角色视图"项目将位于日期左侧的菜单栏中。
输入字符右侧(控制)后,单击收藏夹中的字符以复制搜索结果。
复制信息:
负面的拉丁文大写字母A
Unicode:U + 1F170(U + D83C U + DD70),UTF-8:F0 9F 85 B0
更好的是:在左侧列表中添加unicode并选择它