2012-06-07 16 views
9

Estoy intentando capturar un registro SVN en una cadena dentro de un script de PowerShell.Codificación de salida SVN en PowerShell

En la línea de comandos, la codificación de la salida es correcta, pero tan pronto como capturo en una cadena que no es:

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 
-------------------------------------------------------------- 

Si puede ayudar, aquí es el valor de $ OutputEncoding en mi 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 

Gracias !!

EDIT:

También he probado la salida XML desde SVN como sigue, pero sin suerte!

$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; 
} 

editar # 2:

no sé si se puede ayudar, pero me he dado cuenta de que la misma cuestión es simplemente usando el formato de salida XML directamente en el indicador de la consola de 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

¿El mismo comportamiento sin canalizar a la cadena? –

+0

Sí, exactamente lo mismo :( –

Respuesta

2

tratar de poner esto:

$OutputEncoding = [Console]::OutputEncoding 

antes de su llamada svn.

+0

He probado esto '$ OutputEncoding = [consola] :: OutputEncoding $ = Registro de cambios Invoke-Expresión $ CmdLine |. Fuera string' donde' $ CmdLine' es mi comando svn Aún Desafortunadamente, el mismo problema ... –

+0

¿Qué entorno vas a utilizar en tu PC? ¿Adivinaría el francés, no? –

+0

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

1

No es directamente compatible con powershell, pero SharpSvn proporciona la api de Subversion directamente a .Net, por lo que no necesita ningún análisis.

Si está utilizando 'svn log', le recomendaría usar --xml para evitar tener que lidiar con futuros cambios de salida.

La salida de svn es UTF-8 que se transfiere a Windows como Unicode, así que recomendaría leer como Unicode.

1

Esta publicación de blog Powershell, SVN Log, and Encodings explica y resolvió un problema bastante similar con la codificación SVN en Powershell. Esto funciona para mi.

+0

Gracias por el puntero, pero desafortunadamente esto no resuelve el problema para mí :( –

Cuestiones relacionadas