与 Azure Runbook 一起使用的 Psql 无法处理 UTF-8 编码

问题描述 投票:0回答:1

设置如下,我们有一个 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 写出数据,那么我可以看到“åäö”正确输出到日志中。

到目前为止我已经尝试过:

  • 检查数据库是否使用 UTF-8,它是:
  • 尝试使用
    "SET client_encoding = 'UTF8'; 
  • 在 psql 命令中设置编码
  • 尝试在控制面板中将系统区域设置设置为UTF-8

postgresql powershell utf-8 psql azure-automation
1个回答
0
投票

我找到了原因,显然 Powershell ISE 会自动将格式设置为 UTF-8,而普通的 Powershell 会话不会,因此我在 PS ISE 中的测试有效,但 PS 会话从 Azure Runbook 启动,需要首先使用以下命令手动设置格式:

$OutputEncoding = [System.Text.UTF8Encoding]::new()

© www.soinside.com 2019 - 2024. All rights reserved.