Unter Windows muss ich alle Dateien in einem Verzeichnis finden, die UTF-8 BOM (Byte Order Mark) enthalten. Welches Tool kann das und wie?
Dies kann ein PowerShell-Skript, die erweiterte Suchfunktion eines Texteditors oder was auch immer sein.
Hier ist ein Beispiel für ein PowerShell-Skript. Es sucht im C:
Pfad nach Dateien, in denen sich die ersten 3 Bytes befinden 0xEF, 0xBB, 0xBF
.
Function ContainsBOM
{
return $input | where {
$contents = [System.IO.File]::ReadAllBytes($_.FullName)
$_.Length -gt 2 -and $contents[0] -eq 0xEF -and $contents[1] -eq 0xBB -and $contents[2] -eq 0xBF }
}
get-childitem "C:\*.*" | where {!$_.PsIsContainer } | ContainsBOM
Ist es notwendig, "ReadAllBytes"? Vielleicht ist es besser, nur ein paar erste Bytes zu lesen?
Gutes Argument. Hier ist eine aktualisierte Version, die nur die ersten 3 Bytes liest.
Function ContainsBOM
{
return $input | where {
$contents = new-object byte[] 3
$stream = [System.IO.File]::OpenRead($_.FullName)
$stream.Read($contents, 0, 3) | Out-Null
$stream.Close()
$contents[0] -eq 0xEF -and $contents[1] -eq 0xBB -and $contents[2] -eq 0xBF }
}
get-childitem "C:\*.*" | where {!$_.PsIsContainer -and $_.Length -gt 2 } | ContainsBOM
get-childitem -recurse
auch mit Unterverzeichnissen umzugehen.Nebenbei bemerkt, hier ist ein PowerShell-Skript, mit dem ich die UTF-8-Stücklistenzeichen aus meinen Quelldateien entferne:
quelle
Wenn Sie sich auf einem Unternehmenscomputer (wie ich) mit eingeschränkten Berechtigungen befinden und kein Powershell-Skript ausführen können, können Sie ein portables Notepad ++ mit PythonScript- Plugin verwenden, um die Aufgabe mit dem folgenden Skript auszuführen :
Das Guthaben geht an https://pw999.wordpress.com/2013/08/19/mass-convert-a-project-to-utf-8-using-notepad/
quelle