Tôi đã có một ứng dụng cũ chỉ bắt đầu hoạt động sai, vì bất kỳ lý do gì tôi không chắc chắn. Nó tạo ra một loạt các HTML được ActivePDF chuyển thành các báo cáo PDF.
Quá trình hoạt động như thế này:
- Kéo một mẫu HTML từ DB có mã thông báo được thay thế (ví dụ: "~ CompanyName ~", "~ CustomerName ~", v.v.)
- Thay thế các mã thông báo bằng dữ liệu thực
- Dọn dẹp HTML bằng một hàm regex đơn giản có định dạng các giá trị thuộc tính thẻ HTML (đảm bảo dấu ngoặc kép, v.v., vì công cụ kết xuất của ActivePDF ghét bất cứ thứ gì trừ các dấu ngoặc đơn xung quanh các giá trị thuộc tính)
- Gửi HTML đến một dịch vụ web tạo PDF.
Ở đâu đó trong mớ hỗn độn đó, các không gian không phá vỡ từ mẫu HTML (
) được mã hóa thành ISO-8859-1 để chúng hiển thị không chính xác dưới dạng ký tự "Â" khi xem tài liệu trong trình duyệt (FireFox). ActivePDF tạo ra các ký tự không phải UTF8.
Câu hỏi của tôi: vì tôi không biết vấn đề bắt nguồn từ đâu và không có thời gian để điều tra vấn đề, có cách nào dễ dàng để mã hóa lại hoặc tìm và thay thế các ký tự xấu không? Tôi đã thử gửi nó thông qua chức năng nhỏ này mà tôi đã ném cùng nhau, nhưng nó biến tất cả thành gobbledegook không thay đổi gì cả.
Private Shared Function ConvertToUTF8(ByVal html As String) As String
Dim isoEncoding As Encoding = Encoding.GetEncoding("iso-8859-1")
Dim source As Byte() = isoEncoding.GetBytes(html)
Return Encoding.UTF8.GetString(Encoding.Convert(isoEncoding, Encoding.UTF8, source))
End Function
Có ý kiến gì không?
BIÊN TẬP:
Bây giờ tôi đang nhận được điều này, mặc dù nó dường như không phải là một giải pháp tốt:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function