10

PowerShell スクリプト内の文字列で SVN ログを取得しようとしています。

コマンドラインでは、出力のエンコーディングは正しいですが、文字列でキャプチャするとすぐにそうではありません:

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

ありがとう !!

編集:

次のようにSVNからのXML出力も試しましたが、うまくいきませんでした!

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

編集#2:

それが役立つかどうかはわかりませんが、PowerShell コンソール プロンプトで XML 出力形式を直接使用するだけで同じ問題が発生することに気付きました。

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

4 に答える 4

2

これを入れてみてください:

$OutputEncoding = [Console]::OutputEncoding

あなたのsvn呼び出しの前に。

于 2012-06-07T12:51:41.167 に答える
1

直接PowerShellに対応しているわけではありませんが、SharpSvnはSubversion apiを.Netに直接提供するため、解析はまったく必要ありません。

'svn log'を使用している場合は、将来の出力変更に対処する必要がないように、-xmlを使用することをお勧めします。

svnの出力はUTF-8であり、UnicodeとしてWindowsに転送されるため、Unicodeとして読み取ることをお勧めします。

于 2012-09-06T10:59:22.903 に答える