Ich versuche mit Tabula und Powershell Tabellen aus einem PDF zu extrahieren. Wenn ich den Befehl direkt in der Powershell-Konsole eingebe, bekomme ich das erwartete Ergebnis angezeigt (in UTF-8 mit Umlauten).
java -jar "./tabula-java/$tabulaVersion" --spreadsheet -a 114,53,180,556 "./table.pdf"
Aber wenn ich es in eine String-Variable einfüge und dann in eine Datei schreibe, werden die Umlautsymbole zu Kauderwelsch
$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
Auch wenn ich die Variable in der Konsole ausdrucke, werden die Umlaute nicht richtig angezeigt
$text = java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet -a 114,53,180,556 "./table.pdf"
Write-Output $text
Gibt es eine Möglichkeit, es in einer Zeichenfolgenvariable zu speichern (und somit den Inhalt bearbeiten zu können) und es unter Beibehaltung der UTF-8-Kodierung (ohne BOM) in eine Datei zu schreiben?
Mit dem Ansatz vonhttps://stackoverflow.com/a/5596984/1786528klappt bei mir auch nicht
$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($filepath, $text, $Utf8NoBomEncoding)
Ich erhalte keine Fehlermeldung, es wird aber auch keine Datei erstellt oder eine Zeile hinzugefügt.
Aktualisieren:
[System.IO.File]::WriteAllLines
erstellt eine Datei (in UTF ohne BOM), ich habe nur einen relativen Pfad verwendet und kein gesetzt [System.Environment]::CurrentDirectory = (Get-Location).Path
. Trotzdem sind die Umlaute nicht korrekt.
Weitere Details
Fall 1: Ausgabe direkt in der Konsole, zB
java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"
Fall 2: Ausgabe in Variable gespeichert, dann in Konsole gedruckt, zB
$text = java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"
Write-Output $text
Fall 3:
Ausgabe in Variable gespeichert, aber mit -D"file.encoding=UTF-8"
, dann in der Konsole gedruckt, zB
$text = java -D"file.encoding=UTF-8" -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"
Write-Output $text
Aktualisieren:
$OutputEncoding
= US-ASCII und
[System.Console]::OutputEncoding
= OEM Vereinigte Staaten (IBM437)
Fall 4:
Ausgabe direkt in der Konsole (mit [System.Console]::OutputEncoding
vorheriger Änderung), zB
[System.Console]::OutputEncoding = System.Text.Encoding]::GetEncoding(1252)
java -jar "./tabula-1.0.1-jar-with-dependencies.jar" --spreadsheet "./table.pdf"
Fall 5:
Ausgabe in Variable gespeichert, dann in Konsole gedruckt (mit [System.Console]::OutputEncoding
vorheriger Änderung), zB
[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
Dies ergibt für Umlautsymbole
pdf case 1 case 2 case 3 case 4 case 5
ä ä Σ ├ñ „ ä
ö ö ÷ ├╢ ” ö
ü ü ⁿ ├╝ ü