Tôi đang chỉnh sửa câu trả lời gốc. Câu trả lời trên thực sự đòi hỏi phải xây dựng vì đây là một giải pháp phức tạp của Node.js.
Câu trả lời ngắn gọn là, có, mã này hoạt động.
Câu trả lời dài là, không, FEFF không phải là dấu thứ tự byte cho utf-8. Rõ ràng nút đã lấy một số loại phím tắt để viết mã hóa trong các tệp. FEFF là mã hóa UTF16 Little Endian có thể được nhìn thấy trong bài viết wikipedia của Byte Order Mark và cũng có thể được xem trong một trình soạn thảo văn bản nhị phân sau khi đã viết tệp. Tôi đã xác minh đây là trường hợp.
http://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding
Rõ ràng, Node.js sử dụng \ ufeff để biểu thị bất kỳ số lượng mã hóa. Nó lấy dấu \ ufeff và chuyển nó thành dấu thứ tự byte đúng dựa trên tham số tùy chọn thứ 3 của writeFile. Tham số thứ 3 bạn vượt qua trong chuỗi mã hóa. Node.JS lấy chuỗi mã hóa này và chuyển đổi mã hóa byte cố định thành một trong bất kỳ dấu thứ tự byte mã hóa thực tế nào.
UTF-8 Ví dụ:
fs.writeFile(someFilename, '\ufeff' + html, { encoding: 'utf8' }, function(err) {
/* The actual byte order mark written to the file is EF BB BF */
}
UTF-16 Little Endian Ví dụ:
fs.writeFile(someFilename, '\ufeff' + html, { encoding: 'utf16le' }, function(err) {
/* The actual byte order mark written to the file is FF FE */
}
Vì vậy, như bạn có thể thấy thông báo \ ufeff chỉ đơn giản là một dấu hiệu nêu bất kỳ số lượng kết quả mã hóa. Các mã hóa thực tế mà làm cho nó vào tập tin là trực tiếp phụ thuộc vào tùy chọn mã hóa được chỉ định. Điểm đánh dấu được sử dụng trong chuỗi thực sự không liên quan đến những gì được ghi vào tệp.
Tôi nghi ngờ rằng lý do đằng sau điều này là vì họ chọn không viết các dấu thứ tự byte và dấu 3 byte cho UTF-8 không được mã hóa dễ dàng vào chuỗi javascript được ghi vào đĩa. Vì vậy, họ đã sử dụng UTF16LE BOM làm dấu vị trí trong chuỗi được thay thế tại thời gian ghi.
Tuyệt vời. Cảm ơn bạn. – MMarriott
Dude ... vâng. Điều này hoạt động hoàn hảo. Cảm ơn! Có rất nhiều câu trả lời sai/không hoạt động trên các câu hỏi khác. – KyleFarris
Điều này không phù hợp với tôi. – Moss