2015-05-27 2 views
1

У меня есть файл AppleScript для замены имен файлов, которые предоставляются через файл CSV. Хотя у меня есть сценарий для работы, он имеет проблемы с кодировкой строк/имен файлов.Как сохранить специальные символы при переименовании файла с помощью AppleScript

Поиск файлов работает отлично. Переименование его на что-то вроде Malmö приводит к очень странной закодированной строке.

CSV берет начало из Microsoft Excel, и я подозреваю, что кодировка UTF-8 неправильна. И теперь я застрял в том, как правильно обрабатывать кодировку. (или как преобразовать кодировку). Насколько мне известно, он имеет стандартную кодировку Excel ISO 8859-1.

set theFile to (choose file with prompt "Select the CSV file") 
set thePath to (choose folder with prompt "Select directory") as string 
set theCSVData to paragraphs of ((read theFile)) 

set {oldTID, my text item delimiters} to {my text item delimiters, ";"} 
repeat with thisLine in theCSVData 
    set {oldFileName, newFileName} to text items of thisLine 
    if length of oldFileName > 0 then 
     set oldFile to thePath & oldFileName 
     set newFile to newFileName 
     tell application "System Events" 
      if exists file oldFile then 
       set name of file oldFile to newFile 
      end if 
     end tell 
    end if 
end repeat 

Так что мой вопрос, как я могу решить эту проблему кодирования, либо прочитав его должным образом или путем кодирования файла первой (через AppleScript)

ответ

0

Я действительно думаю, что имена файлов кодируются с помощью UTF16LE, но Я могу ошибаться. Во всяком случае, есть утилита, к которой вы можете получить доступ через терминал, который называется iconv (man iconv), с которым вы можете поэкспериментировать и, возможно, перекодировать имя файла. Если вы получаете вывод из do shell script в виде текста или текста в Юникоде, вы возвращаете utf16, чтобы он не был поврежден после преобразования. (Прежде чем использовать его как имя файла).

+0

могли бы вы дать мне пример того, как преобразовать файл CSV из '' utf16LE' в UTF-8'? Или как преобразовать строки, которые я получаю от него, используя applescript? Я не очень хорошо знаком с –

+0

Я имел в виду, что имена файлов hfs на ** диске ** закодированы в utf16Le. Я думаю, foo, дал вам полный и правильный ответ на то, что я имел в виду (или даже более правильно, потому что я думал о кодировании имен файлов через iconv один за другим.) Теперь, если вы конвертируете csv в utf-8 и возьмите его оттуда, тогда все персонажи, должно быть, все в порядке, (я использую æøå, и это никогда не терпит неудачу). – McUsr

0

Использование:

set theCSVData to paragraphs of ((read theFile as «class utf8»)) 
+0

Я боюсь, что это приведет к тому же деформированным строкам. Как 'J ‰ rf ‰ lla' и' Malm' –

+0

Убедитесь, что CSV также сохранен как UTF8. Если вы можете сохранить его только в ISO8859-1, запустите 'iconv -f ISO8859-1 -t UTF8 '/path/to/file.csv'> '/ path/to/file-utf8.csv'' в терминале для преобразования сначала кодирование UTF8. – foo

+0

hmm, который превращает файл в 0-байтовый файл –

Смежные вопросы