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]::WriteAllLines
cria 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]::OutputEncoding
pré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]::OutputEncoding
pré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
ä ä Σ ├ñ „ ä
ö ö ÷ ├╢ ” ö
ü ü ⁿ ├╝ ü