Вопрос

Когда я выполняю следующую команду:

svnlook changed {path} -r {rev}

где {path} — путь к хранилищу, а {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 может получать информацию только из редакций, а не из транзакций.

Спасибо

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top