2 votos

Automator - Símbolos cirílicos y escritura de archivos

Me sorprendió bastante el hecho de que Apple Automator pueda hacer copias de seguridad de mis notas. Así que escribí un pequeño script para ello. Pero hay dos cuestiones sin resolver.

  1. En para cada uno de los archivos se están creando pero hay vacíos
  2. El cirílico en los archivos se escribe como ?????
  3. ¿Es posible de alguna manera obtener el nombre de la carpeta para estructurarla con archivos como en Apple Note (Opcional)

¿Podría ayudarme con esto?

var app = Application.currentApplication()
app.includeStandardAdditions = true

function writeTextToFile(text, file, overwriteExistingContent) {
    try {
        var fileString = file.toString()
        var openedFile = app.openForAccess(Path(fileString), { writePermission: true })

        if (overwriteExistingContent) {
            app.setEof(openedFile, { to: 0 })
        }

        app.write(text, { to: openedFile, startingAt: app.getEof(openedFile) })

        app.closeAccess(openedFile)

        return true
    }
    catch(error) {
        try {
            app.closeAccess(file)
        }
        catch(error) {
            console.log(`Couldn't close file: ${error}`)
        }

        return false
    }
}

var notesApp = Application('Notes');
notesApp.includeStandardAdditions = true;
var notes = notesApp.notes;

for(var i = 0; i < notes.length; i++) {
  try {
    var desktopString = app.pathTo("desktop").toString()
    var file = `${desktopString}/copy/${notes[i].name()}.txt`
    var text = notes[i].body();

    writeTextToFile(text, file, true)
  }
  catch(error) {
    var desktopString = app.pathTo("desktop").toString()
    var file = `${desktopString}/ERROR.log`
    writeTextToFile(error.message, file, true)
  }
}

0voto

qarma Puntos 71

Se trata de un problema de codificación de texto, que se resuelve especificando la forma en que el write debe tratar los datos que se escriben. Se desea declarar un as del segundo argumento, y asignarle el valor de "utf8" . Por lo tanto, cambie esta línea:

app.write(text, { to: openedFile, startingAt: app.getEof(openedFile) })

a esto:

app.write(text, { to: openedFile, startingAt: app.getEof(openedFile),
                  as: "utf8" });

Al leer desde el archivo, asegúrese de que también se lee como "utf8" .


Algunas notas de JS:

  • La línea notesApp.includeStandardAdditions = true; no está haciendo nada, así que puedes eliminar esto.

  • Termina tus líneas con punto y coma, lo que has hecho con tres de ellas, pero has descuidado el resto.

  • Todas las apariciones de var que aparecen dentro de una función puede (y debe) cambiarse por let . Esto limita el alcance de la variable al bloque en el que se declara la variable, mientras que var crea una variable de alcance global, lo que casi nunca es aconsejable.

  • Todas las apariciones de var que aparecen en el exterior una función puede cambiarse a const ya que son constantes que no cambiarán sus valores en ningún momento.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X