Estoy intentando extraer tablas de un pdf usando tabula y powershell. Cuando ingreso el comando directamente en la consola de PowerShell, aparece el resultado esperado (en utf8 con símbolos de diéresis)
java -jar "./tabula-java/$tabulaVersion" --spreadsheet -a 114,53,180,556 "./table.pdf"
Pero cuando lo pongo en una variable de cadena y luego escribo en un archivo, los símbolos de diéresis se vuelven un galimatías.
$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
Incluso si imprimo la variable en la consola, los símbolos de diéresis no se muestran correctamente
$text = java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet -a 114,53,180,556 "./table.pdf"
Write-Output $text
¿Hay alguna manera de almacenarlo en una variable de cadena (y por lo tanto poder manipular el contenido) y escribirlo en un archivo manteniendo la codificación utf8 (sin BOM)?
Utilizando el enfoque dehttps://stackoverflow.com/a/5596984/1786528a mi tampoco me funciona
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($filepath, $text, $Utf8NoBomEncoding)
No recibo ningún error, pero tampoco se crea ningún archivo ni se agrega ninguna línea.
Actualizar:
[System.IO.File]::WriteAllLines
crea un archivo (en UTF sin BOM), solo usé una ruta relativa y no configuré [System.Environment]::CurrentDirectory = (Get-Location).Path
. Pero, aun así, los símbolos de diéresis no son correctos.
Detalles adicionales
caso 1: salida directamente en la consola, por ejemplo
java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"
caso 2: salida almacenada en variable, luego impresa en la consola, por ejemplo
$text = java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"
Write-Output $text
caso 3:
salida almacenada en variable pero con -D"file.encoding=UTF-8"
, luego impresa en la consola, por ejemplo
$text = java -D"file.encoding=UTF-8" -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"
Write-Output $text
Actualizar:
$OutputEncoding
= US-ASCII y
[System.Console]::OutputEncoding
= OEM Estados Unidos (IBM437)
caso 4:
salida directamente en la consola (con cambios [System.Console]::OutputEncoding
previos), por ejemplo
[System.Console]::OutputEncoding = System.Text.Encoding]::GetEncoding(1252)
java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"
caso 5:
salida almacenada en variable, luego impresa en la consola (con cambios [System.Console]::OutputEncoding
previos), por ejemplo
[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
Esto dará como resultado esto para los símbolos de diéresis
pdf case 1 case 2 case 3 case 4 case 5
ä ä Σ ├ñ „ ä
ö ö ÷ ├╢ ” ö
ü ü ⁿ ├╝ ü