Я пишу Applescript для анализа файла локализации iOS (/en.lproj/Localizable.strings), перевода значений и вывода перевод (/fr.lproj/Localizable.strings) на диск в кодировке UTF-16 (Unicode).
По какой-то причине сгенерированный файл имеет лишний пробел между каждой буквой. Немного покопавшись, я нашел причину проблемы в книге Learn AppleScript: The Comprehensive Guide to Scripting.
«Если вы случайно прочитали файл UTF-16 как MacRoman, результирующее значение на первый взгляд может выглядеть как обычная строка, особенно если оно содержит текст на английском языке. Вы быстро обнаружите, что что-то не так, когда попытаетесь его использовать, однако: общий симптом заключается в том, что перед каждым видимым символом в вашей «строке» находится невидимый символ. Например, чтение текстового файла в кодировке UTF-16, содержащего фразу «Hello World!», в качестве строки приводит к строка типа «Привет, мир! ", где каждый " " на самом деле является невидимым символом ASCII 0."
Так, например, мой строковый файл английской локализации имеет:
"Yes" = "Yes";
И сгенерированный строковый файл французской локализации имеет:
" Y e s " = " O u i " ;
Вот мой метод createFile:
on createFile(fileFolder, fileName)
tell application "Finder"
if (exists file fileName of folder fileFolder) then
set the fileAccess to open for access file fileName of folder fileFolder with write permission
set eof of fileAccess to 0
write ((ASCII character 254) & (ASCII character 255)) to fileAccess starting at 0
--write «data rdatFEFF» to fileAccess starting at 0
close access the fileAccess
else
set the filePath to make new file at fileFolder with properties {name:fileName}
set the fileAccess to open for access file fileName of folder fileFolder with write permission
write ((ASCII character 254) & (ASCII character 255)) to fileAccess starting at 0
--write «data rdatFEFF» to fileAccess starting at 0
close access the fileAccess
end if
return file fileName of folder fileFolder as text
end tell
end createFile
А вот мой метод writeFile:
on writeFile(filePath, newLine)
tell application "Finder"
try
set targetFileAccess to open for access file filePath with write permission
write newLine to targetFileAccess as Unicode text starting at eof
close access the targetFileAccess
return true
on error
try
close access file filePath
end try
return false
end try
end tell
end writeFile
Любая идея, что я делаю неправильно?