Используйте PowerShell для сохранения документа Word как HTML с кодировкой - PullRequest
0 голосов
/ 22 января 2020

Используя следующий скрипт PowerShell, я преобразую каталог документов Word в HTML.

$wdTypes = Add-Type -AssemblyName 'Microsoft.Office.Interop.Word' -Passthru
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.Office.Interop.Word.WdSaveFormat')
$docSrc = "C:\Users\Me\Desktop\TestWordDocs"
$htmlOutputPath = "C:\Users\Me\Desktop\TestHTMLDocs"
$srcFiles = Get-ChildItem $docSrc -filter "*.doc"
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatHTML");
$wordApp = new-object -comobject word.application
$wordApp.Visible = $false

function saveashtml {
  $openDoc = $wordApp.documents.open($doc.FullName);
  $openDoc.saveas([ref]"$htmlOutputPath\$doc.fullname.html", [ref]$saveFormat);
  $openDoc.close();
}

ForEach ($doc in $srcFiles) {
  Write-Host "Converting to html :" $doc.FullName
  saveashtml
  $doc = $null
}

$wordApp.quit();

Это успешно преобразует файл, но не в формате UTF-8, как показано в meta tag.

<meta http-equiv=Content-Type content="text/html; charset=windows-1252">

Специальные символы отображаются как � в файле HTML.

Как это исправить?

1 Ответ

1 голос
/ 22 января 2020

Windows 10 64-бит. Powershell 5.1 и 7r c .1

Используйте PowerShell для преобразования документов Microsoft Word в HTML 4/5.

HTML 4 и 5 документов должны быть сохранены с использованием формата кодировки символов UTF-8. PowerShell меньше версии 6, по умолчанию формат кодировки символов - UTF-8-BOM. <meta http-equiv=Content-Type content="text/html; charset=windows-1252"> не имеет никакого отношения к тому, в какой кодировке сохранен документ.

У вас есть как минимум три задания:

  1. Заменить charset=windows-1252 на charset=UTF-8
  2. Сохраните ваши документы, используя формат кодировки символов UTF-8.
  3. Проверьте выходные данные на наличие ошибок.

Используйте выбранный вами сценарий преобразования. Мне нравится Convert-WordDocument.ps1 Томаса Стенецки для преобразования текстовых документов с PowerShell. Как и большинству сценариев преобразования, требуется Apache OpenOffice ~ v4.1.7 или ~ Microsoft Word 12? (Томас говорит Слово 16) быть установленным на месте. Он преобразует документ Word 2003 объемом 5 МБ с 16 изображениями в html менее чем за двенадцать секунд.

При необходимости измените метаэлемент http-equiv:

<meta http-equiv=Content-Type content="text/html; charset=windows-1252">` 

на

<meta http-equiv=Content-Type content="text/html; charset=UTF-8"> for HTML 4 documents 

или

<meta http-equiv=Content-Type content="text/html; charset=windows-1252">

до

<meta charset="UTF-8"> for HTML 5 documents.

Карта сайта, которую я создал 012420 на xml -sitemaps.com, использовала оба.

<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">

Сохранить / Создайте документ, используя формат кодировки символов UTF-8.

То, что работает в Powershell 5.1, может быть проще в PowerShell 6 или>. Прочитайте ссылки ниже. Более поздние версии PowerShell по умолчанию используют кодировку символов UTF-8.

Powershell 5.1:

# without overwriting. UTF-8 character encoding format.
$source = (gc $env:userprofile\Desktop\source.html) -replace "charset=windows-1252", "charset=UTF-8"
$output = "$env:userprofile\Desktop\output.html"
[IO.File]::WriteAllLines($output, $source)

PowerShell 7r c .1

# without overwriting. UTF-8 character encoding format.
(gc $env:userprofile\Desktop\source.html) -replace "charset=windows-1252", "charset=UTF-8" | out-file -force $env:userprofile\Desktop\output.html
# with overwriting. UTF-8 character encoding format.
(gc $env:userprofile\Desktop\source.html) -replace "charset=windows-1252", "charset=UTF-8" | out-file -force $env:userprofile\Desktop\source.html

Пакетное преобразование с PowerShell 7r c .1:

# with overwriting. UTF-8 character encoding format.
foreach ($i in ls -name "$env:userprofile\Desktop\*.html")
{
    (gc "$env:userprofile\Desktop\$i") -replace "charset=windows-1252", "charset=UTF-8" | out-file -force "$env:userprofile\Desktop\$i"
}

Это должно правильно отображать ваши специальные символы.

Понимание кодировки файла

HTML Charset - W3Schools

Объявление кодировок символов в HTML

HTML http-эквивалент атрибута

Использование PowerShell для записи файла в UTF-8 без спецификации

Общие сведения о кодировке файлов2

Общие сведения о кодировке и изменении по умолчанию то же самое в PowerShell

Какая версия powershell у вас есть $PSVersionTable.PSVersion

Всегда объявляйте кодировку вашего документа, используя метаэлемент с атрибутом charset. Объявление должно полностью помещаться в первые 1024 байта в начале файла, поэтому лучше помещать его сразу после открывающего тега заголовка. Как найти первые 1024 байта файла. html в Windows 10 64-бит? Загрузите http://unxutils.sourceforge.net/UnxUpdates.zip и используйте head -c 1024 myfilenamehere.html

Ничего из перечисленного не сработало, но их следует прочитать.

Изменение выходной кодировки PowerShell по умолчанию на UTF-8

Изменение кодировки исходных файлов и развлечения с PowerShell

Преобразование документов Word с помощью PowerShell

Как преобразовать документ Word в другие форматы использование PowerShell

Сохранение документа Word как HTML

Преобразование документа Word в текстовый файл с использованием powershell

...