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
Đăng nhận xét