使用PowerShell 3 by Out File CMDlet导出德国UMLAUT

使用PowerShell 3 by Out File CMDlet导出德国UMLAUT,powershell,unicode,encoding,utf-8,character-encoding,Powershell,Unicode,Encoding,Utf 8,Character Encoding,当前,我在使用Out FileCMDlet创建日志文件时遇到问题。这一切都很好,但不幸的是,我无法强制PowerShell正确导出德国UMLAUT。我尝试的是: 使用UTF-8编码保存脚本文件(我使用升华文本作为编辑器) 追加我以前使用MS记事本保存的现有文本文件(Out fileCMDlet在本例中使用其-Append参数;否则,如果未另外设置-encoding参数,将创建一个具有Unicode编码的新文件) 使用“我的字符串”| Out文件“xyz.log”-编码utf8,而-Encodi

当前,我在使用
Out File
CMDlet创建日志文件时遇到问题。这一切都很好,但不幸的是,我无法强制PowerShell正确导出德国UMLAUT。我尝试的是:

  • 使用UTF-8编码保存脚本文件(我使用升华文本作为编辑器)
  • 追加我以前使用MS记事本保存的现有文本文件(
    Out file
    CMDlet在本例中使用其
    -Append
    参数;否则,如果未另外设置
    -encoding
    参数,将创建一个具有Unicode编码的新文件)
  • 使用
    “我的字符串”| Out文件“xyz.log”-编码utf8
    ,而
    -Encoding
    参数应使用UTF-8编码处理字符串导出;用双引号(
    “我的字符串”| Out File“xyz.log”-Encoding“utf8”
    )指定
    -Encoding
    的值
    utf8
    )也不起作用

StackOverflow上的其他线程并不能真正解决我的问题。有人知道这个问题的解决方案或至少解决方法吗?

我找到解决问题的方法的速度比我以前想象的要快得多。我所做的是用其Unicode值替换日志字符串中的每个umlaut。为此,我创建了一个数组
$umlauts
,其中包含具有unicode值的特定umlaut

您还应该关注的是,由于PowerShell似乎在umlauts和双引号(
“äöü”
)方面存在问题,因此将日志字符串包装成单引号(
“äöü”

更新1:如所述,带有umlauts的字符串必须用单引号括起来,以便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的技巧使我的实现过时了。只需将日志文本包装成单个量化标记(如
'äöü'| Out File“File.log”
),即可正确导出所有UMLAUT。谢谢大家!

我找到了解决问题的方法,比我以前想象的要快得多。我所做的是用其Unicode值替换日志字符串中的每个umlaut。为此,我创建了一个数组
$umlauts
,其中包含具有unicode值的特定umlaut

您还应该关注的是,由于PowerShell似乎在umlauts和双引号(
“äöü”
)方面存在问题,因此将日志字符串包装成单引号(
“äöü”

更新1:如所述,带有umlauts的字符串必须用单引号括起来,以便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的技巧使我的实现过时了。只需将日志文本包装成单个量化标记(如
'äöü'| Out File“File.log”
),即可正确导出所有UMLAUT。谢谢大家!

奇怪。这对我来说似乎很管用。无论如何,PS处理单引号和双引号的方式是不同的。它将保留一个字符串,按原样用单引号括起来。对于双引号中的字符串,它将检查是否需要进行任何变量替换,e;G“Hello$name”,其中$name是要替换的变量。如果在单引号中有相同的字符串,它将作为文本输出。感谢您的反馈和有关引号的提示。我会在我的解释中加上这个。奇怪。这对我来说似乎很管用。无论如何,PS处理单引号和双引号的方式是不同的。它将保留一个字符串,按原样用单引号括起来。对于双引号中的字符串,它将检查是否需要进行任何变量替换,e;G“Hello$name”,其中$name是要替换的变量。如果在单引号中有相同的字符串,它将作为文本输出。感谢您的反馈和有关引号的提示。我将把这个添加到我的解释中。无法复制<代码>“äöü”输出文件“xyz.log”-编码utf8工作正常。感谢您的反馈。在我对这个问题的研究中,我在几个平台上发现了许多其他线程,人们在这些平台上面临这个问题。可能PowerShell中有一些全局编码参数或任何其他配置在我的情况下不正确。无法复制<代码>“äöü”输出文件“xyz.log”-编码utf8工作正常。感谢您的反馈。在我对这个问题的研究中,我在几个平台上发现了许多其他线程,人们在这些平台上面临这个问题。可能在PowerShell或任何其他配置中有一些全局编码参数,在我的情况下不正确。