feat: marketplace modules and isolated container management
This commit is contained in:
49
scripts/fix-mojibake.ps1
Normal file
49
scripts/fix-mojibake.ps1
Normal file
@@ -0,0 +1,49 @@
|
||||
# Repariert doppel-kodierte UTF-8-Zeichen (Mojibake) in einer Datei.
|
||||
# ASCII-only: Alle Sonderzeichen werden programmatisch berechnet,
|
||||
# damit das Skript selbst von Encoding-Problemen unberuehrt bleibt.
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Path
|
||||
)
|
||||
|
||||
# Erzeugt die Mojibake-Variante eines Strings:
|
||||
# UTF-8-Bytes werden als Windows-1252 interpretiert (exakt der Fehler).
|
||||
function ConvertTo-Mojibake([string]$Text) {
|
||||
$bytes = [System.Text.Encoding]::UTF8.GetBytes($Text)
|
||||
return [System.Text.Encoding]::GetEncoding('windows-1252').GetString($bytes)
|
||||
}
|
||||
|
||||
# Zu korrigierende Zeichen (als Unicode-Codepoints, ASCII-only-Skript)
|
||||
$correctChars = @(
|
||||
[char]0x00FC # ue (klein)
|
||||
[char]0x00F6 # oe (klein)
|
||||
[char]0x00E4 # ae (klein)
|
||||
[char]0x00C4 # Ae (gross)
|
||||
[char]0x00D6 # Oe (gross)
|
||||
[char]0x00DC # Ue (gross)
|
||||
[char]0x00DF # scharfes S
|
||||
[char]0x2013 # en dash
|
||||
[char]0x201E # Anfuehrung unten
|
||||
[char]0x201C # Anfuehrung oben
|
||||
[char]0x2018 # einfaches Anfuehrungszeichen
|
||||
[char]0x2019 # einfaches Anfuehrungszeichen (schliessend)
|
||||
[char]0x2026 # Ellipse
|
||||
[char]0x00B7 # Mittelpunkt
|
||||
[char]0x2014 # em dash
|
||||
)
|
||||
|
||||
$content = [System.IO.File]::ReadAllText($Path, [System.Text.Encoding]::UTF8)
|
||||
|
||||
$replacementCount = 0
|
||||
foreach ($correct in $correctChars) {
|
||||
$mojibake = ConvertTo-Mojibake ([string]$correct)
|
||||
if ($content.Contains($mojibake)) {
|
||||
$count = ([regex]::Matches($content, [regex]::Escape($mojibake))).Count
|
||||
$content = $content.Replace($mojibake, $correct)
|
||||
$replacementCount += $count
|
||||
}
|
||||
}
|
||||
|
||||
$utf8NoBom = New-Object System.Text.UTF8Encoding $false
|
||||
[System.IO.File]::WriteAllText($Path, $content, $utf8NoBom)
|
||||
Write-Output "Korrigiert: $replacementCount Stellen in $Path"
|
||||
Reference in New Issue
Block a user