在 Swift 中使用变音符号转换字符串

Posted

技术标签:

【中文标题】在 Swift 中使用变音符号转换字符串【英文标题】:Convert String with Umlaut in Swift 【发布时间】:2015-01-18 22:32:26 【问题描述】:

我有一个文本字段输入,它返回如下字符串:

let name = "B\U00f6se"

如何转换变音符号,以便 \U00f6(和任何其他特殊字符)被替换为适当的等价物:

name = "Böse";

感谢您的帮助!

//Seb

【问题讨论】:

所以用户在文本字段中输入字符“B”、“\”、“U”、“0”……?那么这可能会有所帮助:***.com/questions/17759574/…(并且将 Objective-C 形式转换为 Swift 应该不会太难:) 为什么你的输入会返回那个?在 ios 中可以直接输入 ö。 @matt 也许这就是问题所在。我正在使用基于此库的表单:SwiftForms。它返回字典中的所有输入。每当有特殊字符时,它都会返回类似上面的内容。有什么想法吗? @Seb:NSDictionaryNSArraydescription 方法使用\Unnnn 语法来打印任何非ASCII 字符。但是,一旦您将字典值分配给字符串,您应该会看到您所期望的。 – 示例见***.com/a/17340103/1187415 @MartinR 我明白了。好的,字典会像这样打印到日志中: gender = M; name = "\U00d6ser" 如何正确地将名称分配给字符串? 【参考方案1】:

NSArrayNSDictionarydescription方法使用\Unnnn 所有非 ASCII 字符的转义序列。

在SwiftForms自带的Xcode示例项目中,submit方法 向用户显示此描述:

func submit(_: UIBarButtonItem!) 

    let message = self.form.formValues().description
    let alert: UIAlertView = UIAlertView(title: "Form output", message: message, delegate: nil, cancelButtonTitle: "OK")
    alert.show()

效果就是你看到的例子

lastName = "B\U00f6se";

description 方法仅适用于调试或日志记录。 您应该做的是枚举所有键和值:

for (key, value) in self.form.formValues() 
    println("\(key) = \(value)")

这会告诉你

lastName = Böse

或检索您感兴趣的表单值:

if let lastName = self.form.formValues()["lastName"] as? String 
    println(lastName) // Böse

【讨论】:

感谢您的 cmets,我刚刚发现了一些非常相似的东西!感谢您的帮助!【参考方案2】:

有一个更简单的方法。

let name = "B\u00f6se"
pinrtln(name)

更多详情请看this entry

【讨论】:

以上是关于在 Swift 中使用变音符号转换字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何从 .NET 中的字符串中删除变音符号(重音符号)?

如何从 .NET 中的字符串中删除变音符号(重音符号)?

swift 3 - 搜索结果也带有变音符号

将单词与特殊字符(é、è、...)进行比较时忽略变音符号

带有德语变音符号的 NSJSONSerialization 异常

带有德语变音符号的 JSON Jackson + HTTPClient