Вызовите iconv из Ruby 1.8.7 через систему, чтобы преобразовать файл из utf-16 в utf-8 - PullRequest
1 голос
/ 19 августа 2011

Вот что я получил:

path_js = 'path/to/a/js/file.js'
path_new_js = 'path/where/the/converted/file/should/go.js'
puts('iconv -f utf-16le -t utf-8 ' + path_js + ' > ' + path_new_js)
system('iconv -f utf-16le -t utf-8 ' + path_js + ' > ' + path_new_js)

Вывод инструкции put:

iconv -f utf-16le -t utf-8 path/to/1-1-2_E1_MC105.js > compiled/path/to/1-1-2_E1_MC105.js

Если я копирую и вставляю ту же самую строку в моем терминале, происходит преобразованиеуспешно, но когда он запускается внутри моего скрипта ruby, новый файл создается с той же кодировкой, что и исходный файл (в данном случае utf-16).Любые идеи о том, что отсутствует / не так?

Приветствия!

Обновление: Я на Mac OS X Snow Leopard и я попробовал тот же скрипт, используя ruby ​​1.8.7(система по умолчанию) и 1.9.2 (Устанавливается с использованием RVM).Я также попробовал следующее:

f = File.open(path_js,'rb')
js = f.read
f.close
new_js = Iconv.conv('utf-8', 'utf-16', js)
File.open(path_new_js,'w'){|f| f.write(new_js)}

С тем же результатом: S

1 Ответ

0 голосов
/ 19 августа 2011

Это должно быть эквивалентно прямому запуску команды, поэтому убедитесь, что она действительно работает правильно.system вернет false в случае ошибки при выполнении.

Вы также можете использовать библиотеку iconv в Ruby, чтобы сделать это напрямую вместо использования инструмента командной строки.Это может предложить больше контроля.

...