当前位置: 首页 > 面试题库 >

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

壤驷旭
2023-03-14
问题内容

在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字符?


问题答案:

更好的方法是对\uNNNNJSON中的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)
// □


 类似资料:
  • 我正在尝试使用raylib显示包含西里尔字符的字符串。所以我加载了一个代码点如下的字体: 如果我画

  • 我有一个包含名称列表的XML文件,其中一些使用默认PDF字体(Helvetica/Arial)中未表示的字符/字形: 我正在使用XSLT和Apache FOP处理这个文件,以生成一个列出名称的PDF文件。目前,我在控制台上收到以下警告,在PDF中,汉字被替换为##: 我查看了文档,似乎可以选择以下选项: 使用OpenType字体——但FOP不支持这种字体 我不想为每种语言使用不同的字体,因为会有中

  • 问题内容: 我只想在HTML页面中显示刻度(✔)和十字(✘)符号,但它显示为方框或粘稠度–显然与编码有关。 我已将meta标签设置为显示utf-8,但显然我缺少了一些东西。 编辑/解决方案: 通过使用FireBug所做的评论,我发现页面传递的标题实际上是“ Content-Type:text / html”,而不是UTF-8。使用Notepad ++查看文件格式时,显示我的文件格式为“没有BOM的

  • 问题内容: 如何在Swift中连接字符串? 在我们喜欢 要么 但是我想用Swift语言做到这一点。 问题答案: 您可以通过多种方式连接字符串: 您也可以这样做: 我相信还有更多方法。 描述位 创建一个常数。(有点像)。设置后就无法更改其值。您仍然可以将其添加到其他东西并创建新变量。 创建一个变量。(有点像),因此您可以更改其值。 注意 在现实中,并有 很大的不同 ,从和,但它可以帮助类比。

  • 问题内容: 扬声器图标unicode 1f50a是“其他符号和象形文字”系列的5位数字,当我尝试显示它时,我得到“ a”,显然我得到的是1f50(不存在空白),后跟“ a”。我可以显示任何4位unicode字符,但找不到如何显示较长的unicode字符。我知道平板电脑可以显示它,就像我在Unicode Map应用程序中看到的那样。 问题答案: 这些字符不能直接用Java字符串表示,因为每个字符仅使