Я пытаюсь извлечь таблицы из pdf с помощью tabula и powershell. Когда я ввожу команду непосредственно в консоль powershell, я получаю ожидаемый результат (в utf8 с умлаут-символами)
java -jar "./tabula-java/$tabulaVersion" --spreadsheet -a 114,53,180,556 "./table.pdf"
Но когда я помещаю его в строковую переменную, а затем записываю в файл, символы умляута становятся бессмыслицей.
$text = java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet -a 114,53,180,556 "./table.pdf"
Set-Content -Path "./file.txt" -Value $text
Даже если я вывожу переменную в консоль, символы умлаута отображаются неправильно.
$text = java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet -a 114,53,180,556 "./table.pdf"
Write-Output $text
Есть ли способ сохранить его в строковой переменной (и, следовательно, иметь возможность манипулировать содержимым) и записать его в файл, сохранив кодировку utf8 (без BOM)?
Используя подход изhttps://stackoverflow.com/a/5596984/1786528у меня тоже не работает
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($filepath, $text, $Utf8NoBomEncoding)
Я не получаю сообщение об ошибке, но и файл не создается и строка не добавляется.
Обновлять:
[System.IO.File]::WriteAllLines
создает файл (в UTF без BOM), я просто использовал относительный путь и не устанавливал [System.Environment]::CurrentDirectory = (Get-Location).Path
. Но тем не менее символы умлаута не верны.
Дополнительные детали
Дело 1: вывести непосредственно в консоль, например
java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"
случай 2: вывод сохраняется в переменной, а затем выводится на консоль, например
$text = java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"
Write-Output $text
случай 3:
вывод сохраняется в переменной, но с -D"file.encoding=UTF-8"
, а затем выводится на консоль, например
$text = java -D"file.encoding=UTF-8" -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"
Write-Output $text
Обновлять:
$OutputEncoding
= US-ASCII и
[System.Console]::OutputEncoding
= OEM США (IBM437)
случай 4:
выводить непосредственно в консоль (с [System.Console]::OutputEncoding
предварительным изменением), например
[System.Console]::OutputEncoding = System.Text.Encoding]::GetEncoding(1252)
java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"
случай 5:
вывод сохраняется в переменной, а затем выводится на консоль (с [System.Console]::OutputEncoding
предварительным изменением), например
[System.Console]::OutputEncoding = System.Text.Encoding]::GetEncoding(1252)
$text = java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"
Write-Output $text
Это приведет к следующему для символов умлаута
pdf case 1 case 2 case 3 case 4 case 5
ä ä Σ ├ñ „ ä
ö ö ÷ ├╢ ” ö
ü ü ⁿ ├╝ ü