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

h9vpoimq  于 11个月前  发布在  Shell
关注(0)|答案(1)|浏览(103)

设置是这样的,我们有一个Azure Runbook,它使用一个带有psql的混合worker将数据插入到运行PostgreSQL的CosmosDB中。
问题是数据包含瑞典语字符,如,ä &<$,当数据插入到DB中时,这些字符转换为?符号,因此“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写出数据,那么我可以看到“”被正确地输出到日志中。
到目前为止,我已经尝试过:

  • 检查DB是否使用UTF-8,即x1c 0d1x
  • 已尝试使用"SET client_encoding = 'UTF8';在psql-command中设置编码
  • 已尝试在控制面板中将系统区域设置设置为UTF-8


92vpleto

92vpleto1#

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

相关问题