Tôi đang nén các tệp JavaScript và máy nén phàn nàn rằng các tệp của tôi có 
ký tự trong đó.
Làm cách nào tôi có thể tìm kiếm những ký tự này và xóa chúng?
Tôi đang nén các tệp JavaScript và máy nén phàn nàn rằng các tệp của tôi có 
ký tự trong đó.
Làm cách nào tôi có thể tìm kiếm những ký tự này và xóa chúng?
U+FEFF
là điểm mã Unicode được sử dụng cho BOM, nhưng bản thân BOM là cách điểm mã đó được mã hóa (UTF-8 0xEF 0xBB 0xBF
:, UTF-16LE:, 0xFF 0xFE
UTF-16BE:, 0xFE 0xFF
v.v.). Vì vậy, các tệp được đề cập đến được mã hóa UTF-8, mà máy nén sẽ phát hiện khi giải mã chúng thành mã điểm Unicode thực tế.
Câu trả lời:
perl -pi~ -CSD -e 's/^\x{fffe}//' file1.js path/to/file2.js
Tôi cho rằng công cụ sẽ bị hỏng nếu bạn có utf-8 khác trong tệp của mình, nhưng nếu không, có lẽ giải pháp này có thể giúp bạn. (Chưa được kiểm tra ...)
Chỉnh sửa : đã thêm -CSD
tùy chọn, theo nhận xét của tchrist.
-CSD
tắc hoặc với PERL_UNICODE
envariable được đặt thành SD
, để điều đó hoạt động.
perl -CSD -pe 's/^\x{feff}//' file.csv
:, lưu ý sự thay đổi từ <fffe> thành <feff>.
Bạn có thể dễ dàng loại bỏ chúng bằng vim , sau đây là các bước:
1) Trong thiết bị đầu cuối của bạn, mở tệp bằng vim:
vim file_name
2) Xóa tất cả các ký tự BOM :
:set nobomb
3) Lưu tệp:
:wq
Một phương pháp khác để xóa các ký tự đó - sử dụng Vim :
vim -b fileName
Bây giờ các ký tự "ẩn" đó hiển thị ( <feff>
) và có thể bị xóa.
Cảm ơn vì những câu trả lời trước, đây là một biến thể sed (1) chỉ trong trường hợp:
sed '1s/^\xEF\xBB\xBF//'
Trên Unix / Linux:
sed 's/\xEF\xBB\xBF//' < inputfile > outputfile
Trên MacOSX
sed $'s/\xEF\xBB\xBF//' < inputfile > outputfile
Lưu ý $ sau sed cho mac.
Trên Windows
Có Super Sed một phiên bản nâng cao của sed. Đối với Windows, đây là một .exe độc lập, dành để chạy từ dòng lệnh.
$'\xEF\xBB\xBF//'
là một tính năng của Bash, không đặc biệt là tính năng của Mac hoặc OSX. Với cấu trúc này, Bash sẽ phân tích cú pháp các chuỗi thoát thành các byte thực tế trước khi chuyển dòng lệnh tới sed
. Tùy thuộc vào sed
biến thể của bạn , điều này có thể hoạt động hoặc có thể không hoạt động (mặc dù tôi chắc chắn rằng nó hữu ích cho người dùng OSX khi biết rằng nó sẽ hoạt động hiệu quả cho họ).
Giải pháp của @ tripleee không phù hợp với tôi. Nhưng thay đổi mã hóa tệp thành ASCII và một lần nữa thành UTF-8 đã thực hiện thủ thuật :-)
Tôi đã sử dụng vimgrep cho việc này
:vim "[\uFEFF]" *
cũng là lệnh tìm kiếm vim bình thường
/[\uFEFF]
Lệnh 'tệp' hiển thị nếu BOM có mặt:
Ví dụ: 'file myfile.xml' hiển thị: "Tài liệu XML 1.0, văn bản UTF-8 Unicode (với BOM), với các dòng rất dài, có dấu cuối dòng CRLF"
dos2unix sẽ xóa BOM.
Trong windows, bạn có thể sử dụng tiện ích mã hóa ngược từ UnxUtils .
Trong Sublime Text, bạn có thể cài đặt gói Highlighter và sau đó tùy chỉnh cụm từ thông dụng trong cài đặt người dùng của mình.
Ở đây tôi đã thêm vào \uFEFF
cuối highlighter_regex
tài sản.
{
"highlighter_enabled": true,
"highlighter_regex": "(\t+ +)|( +\t+)|[\u2026\u2018\u2019\u201c\u201d\u2013\u2014\uFEFF]|[\t ]+$",
"highlighter_scope_name": "invalid",
"highlighter_max_file_size": 1048576,
"highlighter_delay": 3000
}
Để ghi đè cài đặt gói mặc định, hãy đặt tệp ở đây:
~ / .config / sublime-text-3 / Packages / User / highlighter.sublime-settings
Tôi khuyên bạn nên sử dụng công cụ "dos2unix", vui lòng kiểm tra để chạy dos2unix ./thefile.js
.
Nếu cần, hãy thử sử dụng một cái gì đó như thế này cho nhiều tệp:
for x in $(find . -type f -exec echo {} +); do dos2unix $x ; done
Trân trọng.
bomstrip
không dễ dàng có sẵn trên máy Mac của tôi - vì vậy hãy dành thời gian để cung cấp cho bạn phiên bản đơn giản:find . -type f -exec dos2unix '{}' +
Lưu tệp mà không có chữ ký mã.
<U+FEFF>
, đó là<0xEF,0xBB,0xBF>
BOM của tệp UTF8, vì vậy bạn nên thay đổi tiêu đề. Bạn muốn xóa chúng như thế nào? Bằng thần tiên? Bằng công cụ dòng lệnh? Bằng cách chỉnh sửa từng cái một? Notepad ++ có thể thay đổi mã hóa thành UTF8 mà không cần BOM. Ví dụ: chỉ cần googling 5 giây "dải BOM utf8", tôi đã tìm thấy nó cho Linux: ueber.net/who/mjl/projects/bomstrip