Powershell电子邮件附件字符集

我正在处理这个问题。 我有csv文件,这是由PowerShell脚本parsing。 Powershell使用附件创build邮件并使用smtp服务器发送邮件。

问题是,当用户收到电子邮件,打开它,并想打开附件。 它是* .csv附件,并由Excel打开(尝试不同的版本)。 它显示损坏的字符集(字符像ěéáý)。 如果我在Notepad ++中打开文件,我可以看到格式设置为UTF8,没有BOM。 如果我将它转换为带有BOM的UTF8,excel可以打开它没有任何问题。

我的问题是,我不知道在哪里,如果有可能强制创build与物料清单的附件。

string数据从csv文件中读取,如下所示:

$reader = [System.IO.File]::OpenText($inputFile) $data = $reader.ReadLine() $stringData = {parse, copy, clear $data} 

附件是这样创build的:

 $Utf8WithBom = New-Object System.Text.UTF8Encoding($True) [Byte[]]$contentAsBytes = $Utf8WithBom.GetBytes("$stringData") $memoryStream.Write($contentAsBytes, 0, $contentAsBytes.Length) $contentType = New-Object Net.Mime.ContentType -Property @{ MediaType = "application/vnd.ms-excel" CharSet = "UTF-8" Name = $AttachmentName } $attachment = New-Object System.Net.Mail.Attachment $attPath, $contentType $attEmail.Attachments.Add($attachment) 

如果附件文件没有BOM,甚至使用UTF8Encoding,BOM也不会被写入。 您必须首先将没有BOM的文件更改为BOM,然后执行附件。

将编码从无BOM转换为使用附件文件的BOM

 (Get-Content -path "c:\temp\test.txt" -Encoding UTF8) | Set-Content -Encoding UTF8 -Path "c:\temp\test.txt"