>

adb 를 통해 안드로이드 장치에서 파일을 가져오고 싶습니다  macOS 응용 프로그램에서 명령을 실행하십시오.

당기려는 파일 이름에 독일어 움라우트 (äöüÄÖÜ)와 같은 특수 문자가 포함되어있는 경우를 제외하고는 모든 것이 아래 코드와 완벽하게 작동합니다.

이 오류가 발생합니다 : 와이즈 비즈 .

그러나 pyzwyz 명령을 사용할 때   adb: error: failed to stat remote object '/storage/emulated/0/Download/Böse': No such file or directory 내에서 파일이 컴퓨터로 가져옵니다.

여기서 이상한 것은 하위 문자열 adb pull /storage/emulated/0/Download/Böse ~/Desktop 를 복사하면  Xcode 콘솔 출력에서 ​​명령이 Terminal.app 내에서 작동하지 않습니다  내가 /storage/emulated/0/Download/Böse 를 삭제할 때까지  그것을 Terminal.app 로 교체하십시오.  키보드 입력에서.

ö 교체를 시도했습니다  유니 코드 표현 ö 그러나 이것은 효과가 없습니다 (그러나 콘솔 출력에는 여전히 ö 가 표시됩니다)  '잘못된'인코딩 된 코드입니다.

\u{00f6}

문서에서 다음을 찾았습니다.  내가 제공하는 인수를 처리합니다.

와이즈 비즈

이 문제가있는 유일한 사람은 아닌 것 같 으며이 해결 방법을 찾았습니다. NSTask 호출-[NSString fileSystemRepresentation]을 해결하는 방법 인수하지만 스위프트에서는 작동하지 않습니다.

ö

  • 답변 # 1

    해결책으로 이제 adb 명령을 파일에 쓰고 내 응용 프로그램의 bash 명령에서 실행합니다.

    let source = "/storage/emulated/0/Download/Böse"
    let destination = "~/Desktop"
    guard let uniqueURL = URL(string: destination + "/" + ProcessInfo.processInfo.globallyUniqueString) else { return }
    // Write command to file
    let scriptContent = "#!/bin/bash\n~/Library/Android/sdk/platform-tools/adb pull -a \"" + source + "\" \"" + destination + "\""
    try? scriptContent.write(to: uniqueURL, atomically: false, encoding: .utf8)
    // Configure task.
    let task = Process()
    task.environment = ["LC_ALL": "de_DE.UTF-8", "LANG": "de_DE.UTF-8"]
    task.launchPath = "/bin/bash"
    task.arguments = [uniqueURL.path]
    // Configure pipe.
    let pipe = Pipe()
    task.standardOutput = pipe
    task.standardError = pipe
    try? task.run()
    // Run task.
    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output = String(data: data, encoding: .utf8)
    task.waitUntilExit()
    print(output)
    
    

    현재로서는 효과가 있지만, 그다지 우아하지 않고 효율적이지 않기 때문에 만족스러운 해결책이 아니므로 개선이나 더 나은 답변을 환영합니다.

관련 자료

  • 이전 asp.net - gridview에서 확인란을 선택한 경우 데이터베이스에 날짜 추가
  • 다음 reactjs - 오류 해결 방법 null의 'crgName'속성을 읽을 수 없습니다