我正在尝试使用 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
创建一个文件(UTF-无BOM),我只使用了相对路径,没有设置[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
ä ä Σ ├ñ „ ä
ö ö ÷ ├╢ ” ö
ü ü ⁿ ├╝ ü