我将一个字符串作为参数传递给用 swift 编写的命令行工具。
我对某些包含变音符号的字符有疑问。
à á ả ã ạ й ё
如果我作为 line 参数传递,在我得到的应用程序内部à á ả ã ạ й ё
。它看起来一样,但它不是:
func printUnicodeScalars(_ string: String) {
print(string, "->", string.unicodeScalars.map { $0 })
}
printUnicodeScalars("à á ả ã ạ й ё")
// à á ả ã ạ й ё -> ["\u{00E0}", " ", "\u{00E1}", " ", "\u{1EA3}", " ", "\u{00E3}", " ", "\u{1EA1}", " ", "\u{0439}", " ", "\u{0451}"]
printUnicodeScalars("à á ả ã ạ й ё")
// à á ả ã ạ й ё -> ["a", "\u{0300}", " ", "a", "\u{0301}", " ", "a", "\u{0309}", " ", "a", "\u{0303}", " ", "a", "\u{0323}", " ", "\u{0438}", "\u{0306}", " ", "\u{0435}", "\u{0308}"]
我知道 ASCII 中的变音符号字符可以用不同的方式表示:像单个字符,或者像两个字符的组合:一个字母和一个变音符号。
出于某种原因,命令行工具将第一个变体转换为第二个变体。可能那是因为它仅限于 UTF-8。
我怎样才能把它转换回来?喜欢将许多 unicode-scalars 字符连接成一个字符。