fs.writeFile dùng utf-8 encoding nhưng không được



  • Chào mọi người. Em đang làm phần export data ra file csv. Hiện tại em đang bị lỗi ở phần ghi ra file, không hiểu sao khi ghi file em đã dùng loại encoding default là utf8 cho hàm fs.writeFile nhưng khi mở cái file csv đó ra thì lại thấy mấy cái chữ dạng như tiếng việt thì nó bị hiển thị sai. Ai có thể giúp em vơi ạ. Em xin cảm ơn !

    Đây là code ghi file của em
    0_1468682710795_upload-c41e2388-4fb2-431d-a085-4e9e47028205

    Đây là kết quả (chữ đỏ đáng lẽ là "phạm văn đồng")
    0_1468682794128_upload-b8e46057-19dc-4ab0-990a-7110179785db



  • Bạn mở thử bằng Gedit/notepad chuẩn utf-8 encoding && font Arial gì gì đó coi có lỗi không =.=, và xem lại cái dữ liệu csv_content .



  • mình mở bằng notepad ++ chuẩn utf-8 rồi nó hiển thị bình thường chỉ có mở = excel là lỗi v thôi.


  • Global Moderator

    Có 2 nguyên nhân có thể dẫn đến việc không hiển thị được định dạng UTF-8

    1. Bản thân chuỗi csv_content không phải là utf-8, trường hợp này bạn hãy kiểm tra content nguồn lấy về
    2. csv_content đã là utf-8 nhưng trình đọc không hiển thị đúng, trường hợp này bạn có thể kiểm tra bằng cách mở file kết quả với Notepad++

    Nếu bạn rơi vào trường hợp 2 có thể xử lý bằng cách cộng thêm kí tự BOM \uFEFF vào đầu chuỗi csv_content. Cụ thể như thế này:

    var fs = require("fs");
    
    fs.writeFile("test.csv", "\uFEFF" + csv_content, function cb(err) {
        console.log("ok");
    });
    

    Hi vọng đúng trường hợp của bạn :D

    Tech-nông
    Twitter: @nhubaovu
    Profile: about.me/vunb

    3


  • @Vũ Cảm ơn bạn. Mình bị rơi vào trường hợp 2 rồi. Fix theo cách của bạn và đã thành công :D


  • Global Moderator

    @thanh-nam-trần Ko có gì đâu bạn, upvote cho mềnh là đc rồi :))

    Tech-nông
    Twitter: @nhubaovu
    Profile: about.me/vunb

    1

Log in to reply