gpt4 book ai didi

Swift:使用国际格式的字符串执行 Bash 命令

转载 作者:行者123 更新时间:2023-11-28 07:20:25 25 4
gpt4 key购买 nike

我在 ApplescriptSwift 中执行命令时遇到问题。必须使用“/bin/bash”和参数 -c 或 -lc 来启动命令。问题是来自西类牙,命令可能包含重音。á、é、í 等不同的重音会截断命令并以错误结束。

示例命令如:

mkvmerge -i Poesía bonita.mkv

将发布为:

mkvmerge -i Poesi

尝试使用单引号和双引号但没有用。

mkvmerge -i "Poesía bonita.mkv"
mkvmerge -i 'Poesía bonita.mkv'

是否有从 Swift 启动命令的正确方法?

我使用:

let command = "mkvmerge - i '/Users/Poesía bonita.mkv'"

let task = Process()
task.launchPath = "/bin/bash"
task.arguments = ["-lc", command]
let pipe = Pipe()
task.standardOutput = pipe
task.launch()

刚刚尝试使用@RobC 解决方案使用此功能转义特殊字符:

func repairString(theString: String) -> String{

let accentedChars = ["á","Á","ä","Ä","é","É","í","Í","ó","Ó","ö","Ö","ú","Ú","ü","Ü","ñ","Ñ"]

var theNewString = ""
for char in accentedChars{
if theString.contains(String(char)) {
theNewString = theString.replacingOccurrences(of: String(char), with: "\\" + String(char))
}
}

return theNewString
}

但是没有效果

Error: The file '/Users/Poes\i' could not be opened for reading: open file error.

有人有其他想法吗?

问候和感谢

最佳答案

最后一个解决方案:


let launchPath = "/usr/local/bin/python"
let arguments = [PyPath.path, correctPath.path]

print(shell(launchPath, arguments))


func shell(_ launchPath: String,_ arguments: [String]) -> String {

let task = Process()
task.environment = ["LANG" : "es_ES.UTF-8"]
task.launchPath = launchPath
task.arguments = arguments
task.waitUntilExit()

let pipe = Pipe()
task.standardOutput = pipe
task.launch()

let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String

return output
}

诀窍是将环境变量“LANG”设置为正确的。似乎 Process() 将其 env 设置为默认来创建任务。

在 Applescript 中同样如此。

感谢@RobC 和@foo
我永远不会停止向最好的人学习。 ;)

关于Swift:使用国际格式的字符串执行 Bash 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58379361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com