- PowerShell腳本創建使用UTF-8編碼文件
- 用戶可以或不可以編輯的文件,可能失去了BOM,但應保持編碼爲UTF-8,並可能改變行分隔符
- 同樣的PowerShell腳本讀取文件,增加了一些更多的內容,這一切寫爲UTF-8回同一個文件
- 這可以迭代很多次
With Get-Content
and Out-File -Encoding UTF8
我在正確閱讀時遇到問題。它在之前編寫的BOM(將其放入內容中,打破了我的解析正則表達式)的絆腳石,不使用UTF-8編碼,甚至刪除原始內容部分中的換行符。
我需要一個函數,它可以讀取任何UTF-8編碼的文件,忽略並刪除BOM並不修改內容。我應該使用什麼?
我添加了一個小的測試腳本,顯示我想要做什麼更新發生吧。
# Read data if exists
$data = ""
$startRev = 1;
if (Test-Path test.txt)
{
$data = Get-Content -Path test.txt
if ($data -match "^[0-9-]{10} - r([0-9]+)")
{
$startRev = [int]$matches[1] + 1
}
}
Write-Host Next revision is $startRev
# Define example data to add
$startRev = $startRev + 10
$newMsgs = "2014-04-01 - r" + $startRev + "`r`n`r`n" + `
"Line 1`r`n" + `
"Line 2`r`n`r`n"
# Write new data back
$data = $newMsgs + $data
$data | Out-File test.txt -Encoding UTF8
運行了幾次之後,新的章節應該被添加到文件的開頭,現有的內容不應該以任何方式改變(目前失去換行符),應添加任何額外的新行在文件末尾(似乎有時會發生)。
相反,第二次運行給我一個錯誤。
我不是偉大的整個編碼話題,但你不會有重新注入BOM,如果它被刪除,爲了正確閱讀它?我對這個問題有點困惑。爲什麼要刪除UTF-8 BOM? –
我的文本編輯器很笨,並刪除它。無論如何,你永遠不知道文本編輯器用UTF-8文件做什麼。我的腳本應該足夠聰明來處理它。像StreamReader類一樣,它很好。 – ygoe