Кодировка "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. Вы также можете установить язык по умолчанию в скриптах запуска вашей оболочки, чтобы вам не приходилось каждый раз экспортировать его.

Другие вопросы по тегам