2012-06-07 8 views
9

Sto tentando di acquisire un registro SVN in una stringa all'interno di uno script PowerShell.Codifica dell'uscita SVN in PowerShell

Sulla riga di comando, la codifica dell'output è corretto, ma non appena lo catturo in una stringa non è così:

PS C:\sandbox> svn log -r1804 https://myserver.here/svn/myrepo 
-------------------------------------------------------------- 
r1804 | myname | 2012-06-07 | 1 line 
Here is my log message with a special caractère 
-------------------------------------------------------------- 
PS C:\sandbox> $tempStr = svn log -r1804 https://myserver.here/svn/myrepo | Out-String 
PS C:\sandbox> $tempStr 
-------------------------------------------------------------- 
r1804 | myname | 2012-06-07 | 1 line 
Here is my log message with a special caractére 
-------------------------------------------------------------- 

Se può aiutare, ecco il valore di $ OutputEncoding sul mio sistema:

IsSingleByte  : True 
BodyName   : us-ascii 
EncodingName  : US-ASCII 
HeaderName  : us-ascii 
WebName   : us-ascii 
WindowsCodePage : 1252 
IsBrowserDisplay : False 
IsBrowserSave  : False 
IsMailNewsDisplay : True 
IsMailNewsSave : True 
EncoderFallback : System.Text.EncoderReplacementFallback 
DecoderFallback : System.Text.DecoderReplacementFallback 
IsReadOnly  : True 
CodePage   : 20127 

Grazie !!

EDIT:

Ho anche provato l'output XML da SVN come seguire, ma senza fortuna!

$CmdLine = "svn log -r40:HEAD https://myserver.here/svn/myrepo --xml"; 

$Logs = [xml](Invoke-Expression $CmdLine); 

foreach ($Commit in $Logs.log.logentry) 
{ 
    Write-Host $Commit.msg; 
} 

EDIT # 2:

non so se può aiutare, ma ho notato che lo stesso problema è lì semplicemente utilizzando il formato di output XML direttamente sul prompt della console PowerShell :

PS C:\repo> svn log -r999:999 
------------------------------------------------------------------------ 
r999 | myname | 2013-05-29 09:48:20 +0200 (mer., 29 mai 2013) | 2 lines 

Log message line #1 with a special 'caractère' 
Log message line #2 
------------------------------------------------------------------------ 

PS C:\repo> svn log -r999:999 --xml 
<?xml version="1.0" encoding="UTF-8"?> 
<log> 
<logentry 
    revision="999"> 
<author>myname</author> 
<date>2013-05-29T07:48:20.915930Z</date> 
<msg>Log message line #1 with a special 'caractére' 
Log message line #2</msg> 
</logentry> 
</log> 
+0

Stesso comportamento senza tubazioni per out-string? –

+0

Sì, esattamente lo stesso :( –

risposta

2

prova a inserire questa:

$OutputEncoding = [Console]::OutputEncoding 

prima della tua chiamata svn.

+0

Ho provato questo '$ OutputEncoding = [Console] :: OutputEncoding $ ChangeLog = Invoke-Expression $ CmdLine |. Out-STRING' dove' $ CmdLine' è il mio comando svn Ancora lo stesso problema purtroppo ... –

+0

Quale locale stai usando sul tuo PC? Indovinare quello francese, no? –

+0

@YannickBlondeau prova con '$ OutputEncoding = [System.Text.Encoding] :: Unicode' o [System.Text .Encoding] :: UTF8 –

1

Non è direttamente compatibile con Powerhell, ma lo standard SharpSvn fornisce direttamente l'API di Subversion a .Net, quindi non è necessario alcun parsing.

Se si utilizza "svn log", si consiglia di utilizzare --xml per evitare di dover affrontare future modifiche di output.

L'output di svn è UTF-8 che viene trasferito a Windows come Unicode, quindi consiglio di leggere come Unicode.

1

Questo post del blog Powershell, SVN Log, and Encodings spiega e risolve un problema abbastanza simile con la codifica SVN in Powershell. Per me funziona.

+0

Grazie per il puntatore ma purtroppo questo non risolve il problema per me :( –