目標:我嘗試將沒有擴展名的檔案轉換為在 powershell 中以 utf8 編碼的可讀 json。
背景關系:任何 pbix 檔案都可以通過提取其中的一些檔案來“解壓縮”。右鍵單擊 選擇“提取到...”。它將提取一堆檔案和一個檔案夾Report。在Report檔案夾中有一個檔案名為Layout. 該檔案似乎是 json,但沒有 json 擴展名。我的最終目標是利用這個 json,所以我嘗試通過制作一個 powershell 腳本來做到這一點。但是該檔案很難使用,因為我真的不知道如何使用這種型別的檔案。
我的試驗:首先我嘗試復制檔案并更改擴展名。json 檔案似乎沒問題,但根據 Notepad ,該檔案似乎沒有擴展名。然后當我嘗試將檔案的內容轉換為 json 時,它似乎不起作用。
Copy-Item -Path "\Layout" -Destination "\Layout.json"
Get-Content -Raw "\Layout.json" | Out-String | ConvertFrom-Json
這是錯誤訊息:
... \Layout.JSON" | Out-String | ConvertFrom-Json
~~~~~~~~~~~~~~~~
CategoryInfo : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand
然后我嘗試使用 notepad 手動將其轉換為 UTF8 并且成功了!所以這是一個編碼問題。因此,我嘗試獲取不帶擴展名的檔案內容,然后將內容復制到以 UTF8 編碼的全新 json 檔案中。
$MyPath = "\pbi_json.json"
$MyRawString = Get-Content -Raw "\Layout"
Set-Content -Path $MyPath -Value $MyRawString -Encoding UTF8
但它似乎不能很好地作業,因為目標檔案似乎被寄生了NUL character(它是 ASCII 表的第一個字符)。每個字符之間有一個 NUL 字符。當我在 Notepad 中檢查編碼時,它似乎是 UTF8BOM 而不是 UTF8。
那么是否有可能繞過編碼轉換或解決此轉換問題的方法?不要忘記主要目標是從沒有擴展名的檔案中創建一個 json 物件,所以我可以采取任何可以幫助我的解決方案,唯一的條件是這個解決方案不應該需要外部庫。
uj5u.com熱心網友回復:
在每個其他字符之間嵌入 NUL 字符的輸出檔案是輸入檔案以 UTF-16 編碼的癥狀(可能沒有 BOM,因此Get-Content無法檢測到它)。
您可以通過傳遞強制Get-Content使用 UTF-16 (Little Endian) 編碼-Encoding Unicode:
$json = Get-Content -Raw "\Layout" -Encoding Unicode | ConvertFrom-Json
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/530778.html
標籤:json电源外壳编码
