następującej sytuacji:lektura UTF-8 pliki poprawnie z PowerShell
- skrypt PowerShell tworzy plik z kodowaniem UTF-8
- Użytkownik może lub nie może edytować plik, ewentualnie utraty LM, ale należy zachować kodowanie jako UTF-8, i ewentualnie zmianę separatorów
- Ten sam skrypt PowerShell odczytuje plik, dodaje trochę więcej treści i zapisuje je wszystkie jako UTF-8 z powrotem do tego samego pliku
- ten można powtórzyć wiele razy
Z Get-Content
i Out-File -Encoding UTF8
Mam problemy z odczytaniem go poprawnie. To potyka się o BOM, które napisała wcześniej (umieszczając go w treści, przerywając moje regex do analizowania), nie używa kodowania UTF-8, a nawet usuwa podziały wierszy w oryginalnej części treści.
Potrzebuję funkcji, która może odczytać dowolny plik z kodowaniem UTF-8, zignorować i usunąć BOM, a nie modyfikować treści. Co powinienem użyć?
Aktualizacja
Dodałem trochę skrypt testowy, który pokazuje, co staram się robić i co się dzieje, zamiast.
# 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
Po uruchomieniu go kilka razy, nowe odcinki powinny być dodawane do początku pliku, istniejąca zawartość nie powinna być w żaden sposób zmienione (obecnie traci podziały wiersza) i żadne dodatkowe nowe linie powinny zostać dodane na końcu pliku (zdarza się czasem).
Zamiast tego drugi przebieg daje błąd.
nie jestem wielki z całego temacie kodowania, ale nie będzie musiał ponownie wstrzyknąć LM, jeśli zostanie usunięta, w celu poprawnego odczytania? Jestem nieco zdezorientowany tym pytaniem. Dlaczego chcesz usunąć zestawienie komponentów UTF-8? –
Mój edytor tekstu jest głupi i usuwa go. W każdym razie nigdy nie wiesz, co redaktorzy tekstu robią z plikami UTF-8. Mój skrypt powinien być po prostu wystarczająco inteligentny, aby sobie z nim poradzić. Podobnie jak klasa StreamReader robi to całkiem dobrze. – ygoe