我正在嘗試使用 tabula 和 powershell 從 pdf 中提取表格。當我直接在 powershell 控制台中輸入命令時,我得到了顯示的預期結果(以帶有變音符號的 utf8 格式)
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
創建一個檔案(沒有BOM的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
ä ä Σ ├ñ „ ä
ö ö ÷ ├╢ ” ö
ü ü ⁿ ├╝ ü