设置如下,我们有一个 Azure Runbook,它使用带有 psql 的混合工作线程将数据插入到运行 PostgreSQL 的 CosmosDB 中。
问题是数据包含瑞典语字符,如 å、ä 和 ö,当数据插入数据库时,这些字符会转换为 ? 符号,因此“Fjäril”将变为“Fj?ril”。
如果我登录到虚拟机,混合工作线程使用相同的帐户运行,并使用完全相同的数据、数据库、模式和表运行下面完全相同的代码,那么这种情况就不会发生,我可以看到“åäö”在数据库中。
"INSERT INTO $Schema.$table
VALUES('$Guid','$Givenname','$Username','$Surname','$Name');" | & "$psqlpath\psql" --csv $dburl -c
我读到其他人也遇到类似问题,例如本文:https://medium.com/@mozzeph/fix-utf-8-encoding-when-calling-azure-child-runbooks-inline-78644e6af242
但是我没有为此使用任何子 Runbook,我尝试制作一个单独的测试 Runbook,它仅获取数据,然后运行上面的代码并获得相同的结果。
如果我在添加到数据库之前使用 Write-Output 写出数据,那么我可以看到“åäö”正确输出到日志中。
到目前为止我已经尝试过:
我找到了原因,显然 Powershell ISE 会自动将格式设置为 UTF-8,而普通的 Powershell 会话不会,因此我在 PS ISE 中的测试有效,但 PS 会话从 Azure Runbook 启动,需要首先使用以下命令手动设置格式:
$OutputEncoding = [System.Text.UTF8Encoding]::new()