【发布时间】:2018-10-31 23:07:55
【问题描述】:
为什么在 Swift 4.2 中将 String 转换为 URL,然后使用 url.path 将 URL 转换回 String 会更改特殊字符的编码,例如德语变音符号(ä、ö、ü ),即使我使用 utf-8 编码?
我写了一些示例代码来说明我的问题。我将字符串编码为 base64 以表明存在差异。
我也有类似的未解决的特殊字符问题和 swift here。
示例代码
let string = "/path/to/file"
let stringUmlauts = "/path/to/file/with/umlauts/testäöü"
let base64 = Data(string.utf8).base64EncodedString()
let base64Umlauts = Data(stringUmlauts.utf8).base64EncodedString()
print(base64, base64Umlauts)
let url = URL(fileURLWithPath: string)
let urlUmlauts = URL(fileURLWithPath: stringUmlauts)
let base64Url = Data(url.path.utf8).base64EncodedString()
let base64UrlUmlauts = Data(urlUmlauts.path.utf8).base64EncodedString()
print(base64Url, base64UrlUmlauts)
输出
base64 和 base64Url 字符串保持不变,但 base64Umlauts 和 base64UrlUmlauts 不同。
"L3BhdGgvdG8vZmlsZQ==" for
base64"L3BhdGgvdG8vZmlsZQ==" for
base64Url"L3BhdGgvdG8vZmlsZS93aXRoL3VtbGF1dHMvdGVzdMOkw7bDvA==" for
base64Umlauts"L3BhdGgvdG8vZmlsZS93aXRoL3VtbGF1dHMvdGVzdGHMiG/MiHXMiA==" for
base64UrlUmlauts
当我将base64Umlauts 和base64UrlUmlauts 字符串放入在线Base64 解码器时,它们都显示/path/to/file/with/umlauts/testäöü,但ä, ö, ü 是不同的(不是视觉上的)。
【问题讨论】:
标签: ios swift macos encoding utf-8