我试图用英文文本连接阿拉伯语文本,例如:
let pdfName = "\(name)_copy_1234.pdf"
名字就像:传播
1234是我的随机数
但在文档文件夹中它保存如下:copy_35679_وصغا。pdf
这不是一个特定于Swift的问题,因为它融入了Unicode标准,并且与Unicode支持双向脚本的方式有关(例如拉丁语和从右到左的脚本,如阿拉伯语)。考虑在这里查看Unicode Controls for Bidirectional Text的详细解释,以更好地理解方向改变如何覆盖角色。
CodeBlender的答案指出了一个可以正常工作的示例 - 但是,在保存包含扩展字符集的文件名时要小心,因为在保存到旧版操作系统时或者在计算机之间进行传输时可能会遇到问题。
您需要正确地逃避pdfName
字符串的开头和结尾,如下所示:
let name = "وصغار"
let pdfName = "\u{202A}\(name)_copy_1234.pdf\u{202C}"
print(pdfName)
// English وصغار_copy_1234.pdf
// Arabic وصغار_copy_1234.pdf
Apple讨论了it here,但代码是针对Objective-C的,因此它没有说明如何使用{}将Swift正确封装它。