Chuyển đến nội dung chính

CODE CHUYỂN FONT WINDOWS - 1252 SANG UTF 8 TRONG C#

Vấn đề là tôi code một ứng dụng gửi mail trên nền C# , body mail được người dùng tự soạn thảo ở Microsoft Word và lưu lại ở file html.
Khi lưu lại html từ Word, font sẽ mặc định ở thẻ:
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
dẫn đến khi gửi đi, các chữ có dấu tiếng Việt sẽ bị mã hóa thành dấu "?". Sau khi tìm các phương án để chuyển mã không thành mà tôi thì muốn khi soạn thảo body mail người dùng dễ dàng chỉnh sửa nhất và code trong C# cũng đơn giản nhất (không phải kiểm tra các dòng để lấy font, màu, màu nền ...), cuối cùng tôi đã tìm thấy đoạn code này:
Việc đầu tiên là tôi đọc file html theo từng byte ra một mảng bằng hàm:
public static byte[] ReadFile(string filePath)      
    {      
        byte[] buffer;   
        FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);  
        try
        {
            int length = (int)fileStream.Length;  // get file length    
            buffer = new byte[length];            // create buffer     
            int count;                            // actual number of bytes read     
            int sum = 0;                          // total number of bytes read    

            // read until Read method returns 0 (end of the stream has been reached)    
            while ((count = fileStream.Read(buffer, sum, length - sum)) > 0)
                sum += count;  // sum is a buffer offset for next reading
        }
        finally
        {
            fileStream.Close();
        }
        return buffer;
    }

Sau đó ta sử dụng phương án convert từ Windows - 1252 sang UTF8 bằng các lệnh:

Encoding wind1252 = Encoding.GetEncoding(1252);
Encoding utf8 = Encoding.UTF8;
byte[] wind1252Bytes = ReadFile(Path_HtmlFile);
byte[] utf8Bytes = Encoding.Convert(wind1252, utf8, wind1252Bytes);
string utf8String = Encoding.UTF8.GetString(utf8Bytes);

Kiểm tra thử, ứng dụng đã chạy ngon lành, các định dạng được soạn thảo từ người dùng đã vẫn được giữ nguyên.

Buồn buồn code tý cho vui. Cơ mà tôi bán BĐS, ủng hộ nhé:
Web: https://haianhland.com/
Hotline: Tân - 0936.124.338

Nhận xét

Bài đăng phổ biến từ blog này

Chuyển font chữ từ Vntime sang Unicode trong Excel (convert font Vntime to Unicode in Excel)

CHUYỂN FONT TRONG EXCEL Nếu bạn nào phải làm việc nhiều với Office hiển nhiên các bạn biết rằng Office có rất nhiều version, từ Office 97 cho đến hiện tại là Office 2016 beta. Cùng với sự phát triển của Office là việc nâng cấp các bộ gõ tiếng Việt, kinh điển nhất là Vietkey  và Unikey. Cách gõ điển hình nhất trong các loại văn bản là font TCVN3 và Unicode. Đã bao giờ bạn phải làm cái việc chuyển qua lại giữa 2 kiểu font này chưa? Và bạn có từng gặp khó khăn khi chuyển font cho một file Excel khoảng vài ngàn record chưa? Nếu bạn đã từng gặp tình huống trên thì bài viết này sẽ giúp bạn giải quyết vấn đề này. 1. Tổng hợp các phương pháp - Sử dụng phần mềm Uconvert (phiên bản mới nhất UOffice 2.0) - Sử dụng phần mềm tự viết trên C# - Sử dụng bộ gõ Unikey. 2. Phương pháp tối ưu nhất Là dùng bộ gõ Unikey. Bài viết demo file Excel hơn 224.000 record. Cách làm như sau: Bước 1: Bạn mở file Excel gốc của bạn và lưu ở dạng Unicode Text như hình dưới (ở đây tôi lưu v...

LỖI KHÔNG CHO KÉO CÔNG THỨC TỪ DÒNG TRÊN XUỐNG DÒNG DƯỚI TRONG EXCEL

Đôi khi làm việc trong Excel, bạn không kéo được công thức từ dòng trên xuống dòng dưới (khi đặt con trỏ vào dòng chứa công thức, con trỏ không biến thành dấu cộng màu đen để kéo). Khi đó các bạn có thể vào phần Option của Excel --> chọn Advanced --> Tích chọn vào lựa chọn như hình dưới.