Di Windows, saya perlu menemukan semua file dalam direktori yang berisi UTF-8 BOM (tanda byte-order). Alat mana yang bisa melakukan itu dan bagaimana caranya?
Ini bisa berupa skrip PowerShell, fitur pencarian lanjutan editor teks atau apa pun.
Berikut adalah contoh skrip PowerShell. Itu terlihat di C:
jalur untuk semua file di mana 3 byte pertama berada 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
Apakah perlu "ReadAllBytes"? Mungkin membaca hanya beberapa byte pertama akan lebih baik?
Titik adil. Ini adalah versi terbaru yang hanya membaca 3 byte pertama.
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
untuk menangani subdirektori juga.Sebagai catatan, berikut ini adalah skrip PowerShell yang saya gunakan untuk menghapus karakter UTF-8 BOM dari file sumber saya:
sumber
Jika Anda menggunakan komputer perusahaan (seperti saya) dengan hak istimewa terbatas dan tidak dapat menjalankan skrip PowerShell, Anda dapat menggunakan Notepad portabel dengan plugin PythonScript untuk melakukan tugas, dengan skrip berikut:
Kredit diberikan ke https://pw999.wordpress.com/2013/08/19/mass-convert-a-project-to-utf-8-using-notepad/
sumber