我正在处理这个问题。 我有csv文件,由powershell脚本解析。 Powershell创建带附件的电子邮件,并使用smtp服务器发送它。
问题是,当用户收到电子邮件时,打开它并想要打开附件。这是* .csv附件,它由Excel打开(尝试了不同的版本)。它显示了腐败的字符集(像ééáý)。 如果我在Notepad ++中打开文件,我可以看到该格式设置为UTF8而没有BOM。如果我用BOM将其转换为UTF8,excel可以毫无问题地打开它。
我的问题是,我不知道在哪里以及是否可以强制使用BOM创建附件。
从csv文件中读取字符串数据,如下所示:
$reader = [System.IO.File]::OpenText($inputFile)
$data = $reader.ReadLine()
$stringData = {parse, copy, clear $data}
附件是这样创建的:
$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)
答案 0 :(得分:0)
如果附件文件没有BOM,甚至使用UTF8Encoding,则不会写入BOM。您必须首先将文件从没有BOM更改为BOM,然后执行附件。
要将编码从无物料清单更改为附件文件物料清单,请使用
(Get-Content -path "c:\temp\test.txt" -Encoding UTF8) |
Set-Content -Encoding UTF8 -Path "c:\temp\test.txt"