在JSON数据文件中,我有一个像这样的unicode字符:
{
”myUnicodeCharacter”: ”\\u{25a1}”
}
我知道如何从JSON文件中读取数据。当它包含如上所示的字符时,会出现问题。
我将它读入一个String变量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字符?如果它没有直接在代码中给出?
答案 0 :(得分:4)
更好的方法是使用正确的\uNNNN
转义序列
对于JSON中的Unicode字符(有关详细信息,请参阅http://json.org)。
这由NSJSONSerialization
自动处理,您不会
必须转换十六进制代码。
在您的情况下,JSON数据应该是
{ "myUnicodeCharacter" : "\u25a1" }
以下是一个完整的自包含示例:
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)
// □
答案 1 :(得分:0)
我想出了一个解决方案,它没有回答这个问题,但实际上是一种更好的方式来做我想做的事情。
在JSON数据文件中将unicode字符替换为十六进制值,剥离所有转义字符:
{
”myUnicodeCharacter”: ”25a1”
}
然后在读取myUnicodeCharacterString中的值之后,它会像这样处理:
let num = Int(strtoul(myUnicodeCharacterString, nil, 16))
mySKLabelNode.Text = String(UnicodeScalar(num))
这很有效。现在空心方块出现了。