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

Psql used with Azure runbook can't handle UTF-8 encoding

提问人:Erik Andersson 提问时间:11/17/2023 更新时间:11/17/2023 访问量:18

问:

设置是这样的,我们有一个 Azure Runbook,它使用带有 psql 的混合辅助角色将数据插入到运行 PostgreSQL 的 CosmosDB 中。

问题在于数据包含瑞典语字符,如å,ä和ö,当数据插入数据库时,这些字符会转换为?符号,因此“Fjäril”将变为“Fj?ril”。

如果我登录到 VM,混合辅助角色使用相同的帐户运行,并使用完全相同的数据、数据库、架构和表运行下面的完全相同的代码,那么这不会发生,我可以在数据库中看到“åäö”。

"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

但我没有为此使用任何子运行手册,我尝试制作一个单独的测试运行手册,该运行手册仅获取数据,然后以相同的结果运行上面的代码。

如果我在添加到数据库之前使用 Write-Output 写出数据,那么我可以看到“åäö”被正确地输出到日志中。

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

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

enter image description here

PostgreSQL PowerShell UTF-8 psql azure-automation

评论

0赞 jdweng 11/18/2023
问题可能是字体问题。如果您从瑞典向美国发送电子邮件,则美国字符集将无法识别这些字符。你有Unicode设置,它应该可以工作。我会尝试从设置为瑞典设置的两台机器发送,看看问题是否仍然存在。问号通常表示字符不在字体中。

答:

0赞 Erik Andersson 12/3/2023 #1

我找到了原因,显然 Powershell ISE 会自动将格式设置为 UTF-8,而普通的 Powershell 会话则不会,所以我在 PS ISE 中的测试可以正常工作,但 PS 会话从 Azure Runbook 启动,需要先手动设置格式:$OutputEncoding = [System.Text.UTF8Encoding]::new()