Я пытаюсь извлечь таблицы из PDF, используя Tabula и PowerShell. Когда я ввожу команду непосредственно в консоль PowerShell, я получаю ожидаемый результат (в utf8 с символами umlaut)
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 без спецификации), я просто использовал относительный путь и не установил [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
ä ä Σ ├ñ „ ä
ö ö ÷ ├╢ ” ö
ü ü ⁿ ├╝ ü