2

我正在使用 xp_cmdshell 创建文件,如下所示:

SELECT @command = 'echo ' + @fileContent + ' > e:\out\' + @fileName + '.csv'
exec master.dbo.xp_cmdshell 'mkdir "e:\out\"'
exec master..xp_cmdshell @command 

问题是文件内容不是 UTF-8 格式,所以一些特殊字符是错误的。

我可以以 UTF-8 编码创建文件吗?

4

3 回答 3

4

我最终通过将输出写入 temp.txt 文件并添加下一个 PowerShell 命令将其转换为 UTF-8 成功地做到了这一点:

-- Change encoding to UTF-8 with PowerShell 
SET @command = 'powershell -Command "Get-Content '+@Path+'\temp.txt -Encoding Unicode | Set-Content -Encoding UTF8 '+@path+'\'+@filename+'"';
EXEC xp_cmdshell @command;
于 2012-11-28T14:13:01.930 回答
1

您可以使用SQLCMD代替旧技术作为 DOS 输出重定向

sqlcmd -S ServerName -d DataBaseName -E -o "CSV File Path & Location" -Q "Your Query" -W -w 4000 -s ";" -f 65001

开关-f 65001表示使用 UTF8 作为输出文件

SELECT @command = 'sqlcmd -S ServerName -d DataBaseName -E -o "'+ @fileName +'" -Q "Your  Query" -W -w 4000 -s ";" -f 65001'
exec master.dbo.xp_cmdshell 'mkdir "e:\out\"'
exec master..xp_cmdshell @command

ps 我无法对其进行测试,因此请查看 SQLCMD 文档

希望有帮助

于 2012-05-29T11:06:34.883 回答
0

我选择了 Jan Lenders 的方式,但在读取时间时没有使用该编码类型设置。

SET @COMMAND = 'powershell -Command "Get-Content '+ @PATH + @V_FILE_NAME + ' | Set-Content -Encoding UTF8 '+ @PATH + @V_FILE_NAME +'2"';

这是有效的。

谢谢你^^

于 2020-03-11T01:31:09.590 回答