Кодировка "svnlook change"
Когда я выполняю следующую команду:
svnlook changed {path} -r {rev}
где {путь} - это путь к репозиторию, а {rev} - номер ревизии, я получаю следующий вывод:
U trunk/this/is/a/path/Mon fichier avec un nom accentu,.txt
Выходные данные должны быть:
U trunk/this/is/a/path/Mon fichier avec un nom accentué.txt
Символ "é" и другие акцентированные символы не отображаются должным образом...
Есть ли способ для svnlook правильно выводить символы?
Я знаю, что могу использовать "svn log" с опцией "--xml", чтобы получить правильную кодировку, но мне это нужно для ловушки перед фиксацией, а svn.exe может получать информацию только по ревизиям, а не по транзакциям.
Спасибо
2 ответа
Проблема, с которой вы столкнулись, заключается в том, что ваша ловушка перед фиксацией запускается двоичным файлом Subversion, который из соображений безопасности передает пустую среду в скрипт ловушки. Среди вещей, которые делает пустая среда, это удаление любых определенных настроек локали, возвращая вас к системным настройкам по умолчанию (обычно "C" или что-то подобное).
Чтобы получить правильный вывод от svnlook
Вам необходимо восстановить среду, которая вас волнует, прежде чем запускать ее. Если ваш скрипт bash, возможно что-то вроде:
#!/bin/bash
export LANG="en_US.UTF-8"
export PATH="/bin:/usr/bin"
# Run svnlook here and get UTF-8 encoded output
В общем, любая локаль с суффиксом.UTF-8 должна быть в порядке. Учитывая, что вы, кажется, говорите по-французски, локаль 'fr_FR.UTF-8' была бы разумной настройкой.
Вы должны попробовать вызвать это:
export LANG="fr_FR"
(или любой другой язык вашего разработчика) перед использованием svnlook. Вы также можете установить язык по умолчанию в скриптах запуска вашей оболочки, чтобы вам не приходилось каждый раз экспортировать его.