Valor de retorno no script do PowerShell armazenado em string não utf8

Valor de retorno no script do PowerShell armazenado em string não utf8

Estou tentando extrair tabelas de um PDF usando tabula e powershell. Quando insiro o comando diretamente no console do PowerShell, obtenho o resultado esperado exibido (em utf8 com símbolos de trema)

java -jar "./tabula-java/$tabulaVersion" --spreadsheet -a 114,53,180,556 "./table.pdf"

Mas quando eu coloco isso em uma variável de string e depois escrevo em um arquivo, os símbolos de trema ficam sem sentido

$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

Mesmo se eu imprimir a variável no console, os símbolos do trema não serão exibidos corretamente

$text = java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet -a 114,53,180,556 "./table.pdf"   
Write-Output $text  

Existe uma maneira de armazená-lo em uma variável de string (e, portanto, ser capaz de manipular o conteúdo) e gravá-lo em um arquivo mantendo a codificação utf8 (sem BOM)?

Usando a abordagem dehttps://stackoverflow.com/a/5596984/1786528também não funciona para mim

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($filepath, $text, $Utf8NoBomEncoding)

Não recebo nenhum erro, mas também nenhum arquivo é criado ou nenhuma linha é adicionada.

Atualizar:

[System.IO.File]::WriteAllLinescria um arquivo (em UTF sem BOM), usei apenas um caminho relativo e não configurei [System.Environment]::CurrentDirectory = (Get-Location).Path. Mesmo assim, os símbolos do trema não estão corretos.

Detalhes adicionais

caso 1: saída diretamente no console, por exemplo

java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf" 

caso 2: saída armazenada na variável e depois impressa no console, por exemplo

$text = java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"   
Write-Output $text 

caso 3: saída armazenada na variável, mas com -D"file.encoding=UTF-8", e depois impressa no console, por exemplo

$text = java -D"file.encoding=UTF-8" -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"   
Write-Output $text 

Atualizar:

$OutputEncoding= US-ASCII e [System.Console]::OutputEncoding= OEM Estados Unidos (IBM437)

caso 4: saída diretamente no console (com alteração [System.Console]::OutputEncodingprévia), por exemplo

[System.Console]::OutputEncoding = System.Text.Encoding]::GetEncoding(1252)
java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf" 

caso 5: saída armazenada na variável e depois impressa no console (com alteração [System.Console]::OutputEncodingprévia), por exemplo

[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 

Isso resultará nisso para símbolos de trema

pdf    case 1    case 2     case 3    case 4     case 5
 ä      ä         Σ          ├ñ        „          ä
 ö      ö         ÷          ├╢        ”          ö
 ü      ü         ⁿ          ├╝                  ü

informação relacionada