PowerShell和德语umlauts

3

我用PowerShell ISE编写了一个针对MySQL数据库的脚本,利用MySQL dump工具来创建备份。在PowerShell ISE中运行脚本时,一切都正常。但是如果现在在普通PowerShell中执行相同的脚本,它就不能正确地显示德语umlauts。

这是我的脚本:

# delete everything older than 30 days
foreach ($ordner in (ls D:\Backup -Depth 0)) 
{
    if ($ordner.LastWriteTime.Date -lt (Get-Date).AddDays(-30).Date)
    {
        rm -Recurse ("D:\Backup\"+ $ordner.Name)
    }
}


mkdir ("D:\Backup\" + (Get-Date -Format "yyyy_MM_dd") + "\Datenbank")

C:\xampp\mysql\bin\mysqldump.exe -uroot --default-character-set=latin1 --opt MY_DATABASE > ("D:\Backup\"+(Get-Date -Format "yyyy_MM_dd") + "\Datenbank\backup.sql")

然而,我需要普通的PowerShell来执行自动化脚本。

如何解决在正常的PowerShell中正确显示德语umlauts(变音符号)的问题?

1个回答

3

Windows PowerShell ISE 不同于常规 (conhost.exe) PowerShell 控制台窗口,因为它根据活动的 ANSI 代码页(例如在英语系统上为 Windows-1252)解释来自 外部程序(例如 mysqldump.exe)的输出 - 这就是你命令中的 --default-character-set=latin1 请求的内容。

相比之下,常规 PowerShell 控制台窗口 默认为活动的 OEM 代码页(例如在英语系统上为437)。

[console]::OutputEncoding 报告的编码决定了PowerShell如何解释外部程序的输出(尽管对于纯显示输出,这可能并不重要)。

因此,你有两个选择:

  • --default-character-set选项调整为与[console]::OutputEncoding报告的代码页相匹配,假设 MYSQL 支持它(例如,此文档表明,例如美国英语 OEM 代码页437不受支持)。

  • [console]::OutputEncoding调整为(暂时)与指定的--default-character-set选项相匹配:

    • [console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(1252)

通常情况下,是 (Get-Culture).TextInfo.ANSICodePage / (Get-Culture).TextInfo.OEMCodePage 报告给定系统的活动 ANSI / OEM 代码页号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接