Json 如何在Swift中显示间接给定的unicode字符?

Json 如何在Swift中显示间接给定的unicode字符?,json,swift,unicode,Json,Swift,Unicode,在JSON数据文件中,我有一个unicode字符,如下所示: { ”myUnicodeCharacter”: ”\\u{25a1}” } 我知道如何从JSON文件中读取数据。当它包含如上所示的字符时,就会出现问题 我将其读入一个字符串变量myUnicodeCharacterString,该变量获取值“\u{25a1}”。顺便说一下,我不能在JSON数据文件中使用一个斜杠,因为在这种情况下,它无法识别文件中的数据是正确的JSON对象,返回nil 但是,当该值被指定给用于显示该值的对象(例

在JSON数据文件中,我有一个unicode字符,如下所示:

{
    ”myUnicodeCharacter”: ”\\u{25a1}”
}
我知道如何从JSON文件中读取数据。当它包含如上所示的字符时,就会出现问题

我将其读入一个字符串变量myUnicodeCharacterString,该变量获取值“\u{25a1}”。顺便说一下,我不能在JSON数据文件中使用一个斜杠,因为在这种情况下,它无法识别文件中的数据是正确的JSON对象,返回nil

但是,当该值被指定给用于显示该值的对象(例如,SKLabelNode)时,该值不会编码为其图形表示形式:

mySKLabelNode.Text = myUnicodeCharacterString // displays ”\u{25a1}” and not a hollow square
问题归结为:

// A: direct approach, does works
let unicodeValueByValue = UnicodeScalar("\u{25a1}") // ”9633”
let c1 = Character(unicodeValueByValue) // ”a hollow square”

// B: indirect approach, this does not work
let myUnicodeString = "\u{25a1}"
let unicodeValueByVariable = UnicodeScalar(myUnicodeString) // Error: cannot find an initialiser
let c2 = Character(unicodeValueByVariable)

那么,如果代码中没有直接给出格式为\u{xxxx}的unicode字符,如何显示它呢

我想出了一个解决方案,它没有回答这个问题,但实际上是一种更好的方式来做我想做的事情

unicode字符在JSON数据文件中改为十六进制值,去掉所有转义字符:

{
    ”myUnicodeCharacter”: ”25a1”
}
然后,在读取myUnicodeCharacterString中的值后,它的处理方式如下:

let num = Int(strtoul(myUnicodeCharacterString, nil, 16))
mySKLabelNode.Text = String(UnicodeScalar(num))

这起作用了。现在空心方块出现了。

更好的方法是使用正确的\n逃逸序列 有关JSON中的Unicode字符的详细信息,请参阅。 这是由NSJSONSerialization自动处理的,您不需要这样做 必须转换十六进制代码

在您的例子中,JSON数据应该是

{ "myUnicodeCharacter" : "\u25a1" }
美好的还允许将\uxxx类型与@、$、A等混合使用。谢谢!
let jsonString = "{ \"myUnicodeCharacter\" : \"\\u25a1\"}"
println(jsonString)
// { "myUnicodeCharacter" : "\u25a1"}

let dict = NSJSONSerialization.JSONObjectWithData(jsonString.dataUsingEncoding(NSUTF8StringEncoding)!,
            options: nil, error: nil) as [String : String]

let myUnicodeCharacterString = dict["myUnicodeCharacter"]!
println(myUnicodeCharacterString)
// □