1

Я пытаюсь извлечь таблицы из 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
 ä      ä         Σ          ├ñ        „          ä
 ö      ö         ÷          ├╢        ”          ö
 ü      ü         ⁿ          ├╝                  ü

0