2012-06-07 4 views
9

Я пытаюсь захватить журнал SVN в строке внутри сценария PowerShell.Кодировка вывода SVN в PowerShell

В командной строке, кодирование вывода является правильным, но как только я захватить его в строке это не так:

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

Если это может помочь, здесь значение $ OutputEncoding в моей системе:

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 

Спасибо!

EDIT:

Я также попробовал вывод XML из SVN, как следует, но не повезло!

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

Я не знаю, если это может помочь, но я заметил, что тот же вопрос, есть просто используя формат вывода XML непосредственно на строке консоли 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

Одинаковое поведение без трубопроводов на выходе? –

+0

Да, точно так же :( –

ответ

2

Попробуйте поставить это:

$OutputEncoding = [Console]::OutputEncoding 

перед вызовом svn.

+0

Я испытал это '$ OutputEncoding = [Console] :: OutputEncoding $ ChangeLog = Invoke-Expression $ CmdLine |. Из-String' где' $ CmdLine' моя команда СВН Still та же проблема, к сожалению ... –

+0

Какой язык вы используете на своем ПК? Угадайте французский, нет? –

+0

@YannickBlondeau попробуйте с '$ OutputEncoding = [System.Text.Encoding] :: Unicode' или [System.Text .Encoding] :: UTF8 –

1

Это не удобно для дружественных источников энергии, но SharpSvn предоставляет Subversion api непосредственно .Net, так что вам вообще не нужен синтаксический анализ.

Если вы используете 'svn log', я бы рекомендовал использовать -xml, чтобы избежать необходимости в будущих изменениях выпуска.

Выход svn является UTF-8, который переносится в Windows как Unicode, поэтому я бы рекомендовал читать как Unicode.

1

В этом блоге Powershell, SVN Log, and Encodings объясняется и решена аналогичная проблема с кодировкой SVN в Powershell. Меня устраивает.

+0

Спасибо за указатель, но, к сожалению, это не решает проблему для меня :( –

Смежные вопросы