使用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记事本保存的现有文本文件(
CMDlet在本例中使用其Out file
参数;否则,如果未另外设置-Append
参数,将创建一个具有Unicode编码的新文件)-encoding
- 使用
,而“我的字符串”| Out文件“xyz.log”-编码utf8
参数应使用UTF-8编码处理字符串导出;用双引号(-Encoding
)指定“我的字符串”| 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或任何其他配置中有一些全局编码参数,在我的情况下不正确。