2016-08-09 2 views
0

現在、ログファイルの作成に使用するOut-File CMDletの問題に直面しています。これは問題なく動作しますが、残念ながらPowerShellにドイツ語のウムラウトを正しくエクスポートすることはできません。私が試したことだった:(Out-Fileコマンドレットがその-Appendパラメータを使用する前に、私はMSメモ帳に保存された既存のテキストファイルを追加するUTF-8エンコーディング(私は編集者としての崇高なテキストを使用します) Out-File CMDletによるドイツ語ウムラウトのPowerShell 3のエクスポート

  • でスクリプトファイルを保存

    • -Encodingパラメータが別途設定されていない場合、Unicodeエンコーディングを持つ新しいファイルが作成されます。
    • "My String" | Out-File "xyz.log" -Encoding utf8を使用し、-EncodingパラメータはUTF-8エンコーディングで文字列エクスポートを処理する必要があります。二重引用符で-Encodingの値utf8"My String" | Out-File "xyz.log" -Encoding "utf8")を指定すると、実際に私の問題を解決することができませんでしたStackOverflowの上だけでなく

    Microsoft's Developer Networkや他のスレッドを動作しません。誰もが解決策または少なくともこの問題の回避策を知っていますか?

  • +0

    再生できません。 ''ööü '| Out-File "xyz.log" -Encoding utf8'はうまく動作します。 –

    +0

    ご意見ありがとうございます。この問題に関する私の研究の中で、私はいくつかのプラットフォームでこの問題に直面している多くのスレッドを発見しました。おそらく、私のケースでは正しくないPowerShellや他の設定のグローバルエンコードパラメータがあります。 –

    答えて

    0

    私は以前考えたよりもずっと速く問題の回避策を見つけました。私がしたのは、ロギング文字列の各ウムラウトをUnicode値に置き換えることです。そのために私はユニコード値を持つ特定のウムラウトを含む配列の配列$umlautsを作成しました。

    何も焦点を当てる必要がありますすることは、PowerShellはウムラウトと二重引用符("äöü")に問題があるように見えるという事実に単一重引用符('äöü')にあなたのロギング文字列をラップすることです。

    UPDATE 1:n3wjackで述べたように、ウムラウトを持つ文字列が「そのまま」PowerShellはすべての文字を処理するように、単一引用符でラップする必要があります。

    function Out-LogFile ($str) { 
        $umlauts = @(
         @('Ä',[char]0x00C4), 
         @('Ö',[char]0x00D6), 
         @('Ü',[char]0x00DC), 
         @('ä',[char]0x00E4), 
         @('ö',[char]0x00F6), 
         @('ü',[char]0x00FC) 
        ) 
    
        foreach ($umlaut in $umlauts) { 
         $str = $str -replace $umlaut[0],$umlaut[1] 
        } 
    
        $str | Out-File "myfile.txt" 
        return $str 
    } 
    
    Out-LogFile 'ÄÖÜäöü' 
    

    UPDATE 2:

    は、ここで私は、上記のもののための私の実装である私はn3wjackの先端が私の実装が時代遅れになることに気づきました。ログテキストを一重引用符(例えば、'äöü' | Out-File "file.log")にラップするだけで、すべてのウムラウトが正しくエクスポートされます。ありがとうございました!

    +1

    奇妙な。これは私のためにうまくいくようです。とにかく、PSが一重引用符と二重引用符をどのように処理するかに違いがあります。単引用符で囲まれた文字列をそのまま残します。二重引用符で囲まれた文字列の場合は、変数の置換が必要かどうかを確認します(例:g)。 "Hello $ name"、$ nameは置き換える変数です。同じ文字列を一重引用符で囲むと、リテラルとして出力されます。 – n3wjack

    +0

    ご意見とご意見をお送りいただき、ありがとうございます。これを私の説明に加えます。 –

    関連する問題