设置是这样的,我们有一个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
的
1条答案
按热度按时间92vpleto1#
我找到了原因,显然Powershell伊势会自动将格式设置为UTF-8,而普通的Powershell会话不会,所以我在PS ISE中的测试工作,但从Azure Runbook开始的PS会话需要首先手动设置格式:
$OutputEncoding = [System.Text.UTF8Encoding]::new()