Dưới đây là cách tôi phát hiện họ mã hóa văn bản Unicode thông qua BOM. Độ chính xác của phương pháp này thấp, vì phương pháp này chỉ hoạt động trên các tệp văn bản (cụ thể là các tệp Unicode) và mặc định ascii
khi không có BOM (như hầu hết các trình soạn thảo văn bản, mặc định sẽ là UTF8
nếu bạn muốn khớp với hệ sinh thái HTTP / web ).
Cập nhật 2018 : Tôi không còn đề xuất phương pháp này nữa. Tôi khuyên bạn nên sử dụng file.exe từ các công cụ GIT hoặc * nix theo khuyến nghị của @Sybren và tôi chỉ cho bạn cách thực hiện điều đó qua PowerShell trong câu trả lời sau .
# from https://gist.github.com/zommarin/1480974
function Get-FileEncoding($Path) {
$bytes = [byte[]](Get-Content $Path -Encoding byte -ReadCount 4 -TotalCount 4)
if(!$bytes) { return 'utf8' }
switch -regex ('{0:x2}{1:x2}{2:x2}{3:x2}' -f $bytes[0],$bytes[1],$bytes[2],$bytes[3]) {
'^efbbbf' { return 'utf8' }
'^2b2f76' { return 'utf7' }
'^fffe' { return 'unicode' }
'^feff' { return 'bigendianunicode' }
'^0000feff' { return 'utf32' }
default { return 'ascii' }
}
}
dir ~\Documents\WindowsPowershell -File |
select Name,@{Name='Encoding';Expression={Get-FileEncoding $_.FullName}} |
ft -AutoSize
Khuyến nghị: Điều này có thể hoạt động khá tốt nếu dir
, ls
hoặc Get-ChildItem
chỉ kiểm tra được biết đến tập tin văn bản, và khi bạn chỉ tìm kiếm "mã hóa xấu" từ một danh sách được biết đến các công cụ. (tức là SQL Management Studio mặc định là UTF16, đã phá vỡ GIT auto-cr-lf cho Windows, vốn là mặc định trong nhiều năm.)