2009-04-30 49 views
1

當我執行以下命令:「svnlook的改變」編碼

svnlook changed {path} -r {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」選項來獲得正確的編碼,但是我需要這個用於pre-commit鉤子,並且svn.exe只能從修訂中獲取信息,而不能交易。

感謝

+0

我可以發誓我見過這個問題以前問過,答案必須與設置外殼顯示編碼的字符,但我無法找到它:( – rmeador 2009-04-30 20:28:46

回答

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」區域設置將是一個合理的設置。

0

你應該嘗試調用此:

export LANG="fr_FR" 

(或其他開發者的語言)使用svnlook的之前。您還可以在您的shell啓動腳本中設置默認語言,所以您不必每次都導出它。