通过Out-File CMDlet导出带有PowerShell 3的德语变音符号

时间:2016-08-09 05:33:59

标签: powershell unicode encoding utf-8 character-encoding

我目前遇到了Out-File CMDlet的问题,我用它来创建日志文件。这很好用,但遗憾的是我无法强制PowerShell正确导出德语变音。我试过的是:

  • 使用UTF-8编码保存脚本文件(我使用Sublime Text作为编辑器)
  • 附加我在MS Notepad之前保存的现有文本文件(Out-File CMDlet在这种情况下使用其-Append参数;否则创建一个具有Unicode编码的新文件{{1} }}参数未设置)
  • 使用-Encoding,而"My String" | Out-File "xyz.log" -Encoding utf8参数应使用UTF-8编码处理字符串导出;使用双引号(-Encoding)指定utf8的值-Encoding不起作用

Microsoft's Developer Network和StackOverflow上的其他线程无法解决我的问题。有没有人知道这个问题的解决方案或至少解决方法?

1 个答案:

答案 0 :(得分:0)

我发现问题的解决方法比我之前想象的要快得多。我所做的是用一个Unicode值替换日志字符串中的每个变音符号。为此,我创建了一个包含特定变音符号及其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 'ÄÖÜäöü'

更新2:我注意到n3wjack的提示使我的实现过时了。通过将日志文本包装成单个quoatation标记(如'äöü' | Out-File "file.log"),可以正确导出所有变音符号。谢谢!