Powershell隐藏选项卡到HTML邮件中的空格

时间:2019-02-26 12:20:47

标签: powershell character-encoding

我创建了一个将docx文件转换为html文件的脚本。
html文件通过电子邮件作为html文本发送。
要将文档转换为html,可以这样做。

function ConvertDocToHtml {

  [cmdletbinding()]

  param($DocFile,[string]$HTMLTemplate)

  # Fix Type Error
  Add-Type -AssemblyName Microsoft.Office.Interop.Word

  $saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatFilteredHTML");
  $word = new-object -comobject word.application
  $word.Visible = $False
  $opendoc = $word.documents.open($DocFile.FullName);
  $opendoc.saveas($HTMLTemplate, $saveFormat);
  $opendoc.close();

  $word.quit();
}

要在发送电子邮件之前修复HTML文本中的特殊字符,我可以使用类似的替换功能

$Body = Get-Content $HTMLFile -Raw
$BodyHTML = ReplaceChars $Body

function ReplaceChars {

  [cmdletbinding()]

  # EncodeHTMLSpecialChars
  $Streng = $Streng.Replace("à", "à");
  $Streng = $Streng.Replace("è", "è");
  $Streng = $Streng.Replace("€", "€");
  ...

  Send-MailMessage ... -Body $BodyHTML -BodyAsHtml

一切正常,但是当我在docx文件中使用选项卡多个空格时,电子邮件的文本会显示这些字符

Total         € 100,00

我试图以这种方式进行转换,但没有成功

$Streng = $Streng.Replace("Â", " ");

我该如何解决这个问题?
谢谢

1 个答案:

答案 0 :(得分:1)

Word的另存为HTML将用no-break spaces160 / 0xa0)替换制表符。

可以用.Replace()替换这些字符,但是当每个选项卡扩展到几个空格时,正则表达式就会出现。像这样

# Replace no-break spaces with ordinary spaces
[regex]::replace($Streng , '\xa0+', ' ')