首页 > 解决方案 > UTF7 中的 Powershell 输入 CSV - 某些字符的 UTF 8 输出问题

问题描述

我有一个客户需要从 UTF8 无 BOM 的 SQL Server 2016 数据库导出数据库。我使用 PowerShell 从数据库(ANSI 格式)导入原始输出,并以 UTF-8 格式输出文件。

现在我收到回复,是否可以删除一些“特殊字符”,并看到 PowerShell 已更改它,如图所示。

PowerShell 有什么办法可以保留或完全删除它?

将来其他字符也可能会发生这种情况,我们的示例数据集仅包含此特定字符。

图片

编辑:客户有一个批处理脚本,它将选择请求从 MSSQL 服务器导出到 CSV 文件。脚本如下:

sqlcmd -S [SERVER]\[INSTANCE] -U sa -P [PASSWORD] -d [DATABASE] -I -i "C:\Path\To\Query.sql" -o "C:\Path\For\Output\Ouput.csv" -W -s"|"

CSV 由管道分隔。然后请求添加双引号作为文本标识符,并将编码更改为 UTF-8 无 BOM。数据库显然以 ANSI 格式导出文件。

我创建了一个 powershell 脚本,因为我知道它会自动为我添加双引号,并且我应该能够通过它更改编码。

脚本如下:

$file = Import-Csv -Path "C:\Path\For\Output\Ouput.csv" -Encoding "UTF7" -Delimiter "|"

$file | Export-Csv  -path "C:\Path\For\Output\Ouput.csv" -delimiter "|" -Encoding "UTF8noBOM" -NoTypeInformation

在输入步骤中使用 -Encoding UTF7 标志的原因是,如果没有它,我们会遇到特殊字母的问题,例如ßand äöü(我们在德国,这些会很常见)。通过此脚本运行文件后,它基本上应该是这样,但是屏幕截图中的示例对于之后尝试将文件导入系统的人来说是一个问题。

这有帮助吗?我很乐意提供任何进一步的信息,谢谢你的进步!

编辑:找到解决方案。我编辑了从数据库创建导出的客户原始脚本,我添加了 -u 标志,使输出为 Unicode。它还不是 UTF8,但 powershell 脚本现在可以正确转换文件,也无需将导入编码设置为 UTF7。感谢 JosefZ 质疑我对强制 UTF7 编码的使用,让我意识到我找错了地方来解决这个问题。

标签: powershellutf-8character-encoding

解决方案


推荐阅读