UTF-7 có liên quan như thế nào khi phân tích email?


8

Gần đây tôi đã thực hiện các email đến cho một ứng dụng và chàng trai, tôi đã mở cổng địa ngục chưa? Kể từ đó, mỗi ngày có một email đến khiến ứng dụng bị lỗi theo một cách khác.

Một trong những điều đó là các email được mã hóa dưới dạng UTF-7. Hầu hết các email đến dưới dạng ASCII, một số mã hóa tiếng Latinh, hoặc may mắn thay, UTF-8.

Thông báo lỗi Hotmail (như địa chỉ email không tồn tại hoặc vượt quá hạn ngạch) dường như đến dưới dạng UTF-7. Thật không may, UTF-7 không phải là mã hóa mà Ruby hiểu:

> "hello world".encode("utf-8", "utf-7")
Encoding::ConverterNotFoundError: code converter not found (UTF-7 to UTF-8)

> Encoding::UTF_7
 => #<Encoding:UTF-7 (dummy)> 

Ứng dụng của tôi không gặp sự cố, nó thực sự xử lý email khá tốt, nhưng nó sẽ gửi cho tôi một thông báo về lỗi tiềm ẩn.

Tôi đã dành một chút thời gian để googling và tôi không thể tìm thấy bất kỳ ai thực hiện chuyển đổi, ít nhất là không phải là Mã hóa Ruby 1.9.3.

Vì vậy, câu hỏi của tôi là, vì tôi chưa bao giờ nhận được email có nội dung thực tế, từ một người thực tế, trong UTF-7, mã hóa đó có liên quan như thế nào? Tôi có thể yên tâm bỏ qua nó?


3
UTF-7 hầu như không được sử dụng ở bất cứ đâu ngoại trừ trong các giao thức email như IMAP
Charles Salvia

Câu trả lời:


10

Các chỉ tính năng liên quan của UTF-7 (trên UTF-8 chẳng hạn) là nó là một mã hóa 7-bit, giống như tốt ASCII cũ là. Điều đó có nghĩa là nó hoạt động trên một hệ thống không sạch 8 bit .

Hệ thống quy mô lớn duy nhất mà vấn đề này thậm chí còn quan trọng hiện nay là máy chủ thư (đừng hỏi tôi tại sao họ không khắc phục vấn đề này 10-20 năm trước, hầu hết các máy chủ đã làm, nhưng một số người vẫn không thể hiểu được).

Vì vậy: UTF-7 sẽ chỉ có sự liên quan trong các hệ thống email. Ở mọi nơi khác UTF-8 là sự lựa chọn tốt hơn.


2
Chà, tôi đang phân tích email, hầu hết các email là UTF-8, câu hỏi của tôi là tôi nên mong đợi bao nhiêu email là UTF-7.
Pupeno

7

Nhờ nhận xét của Charles Salvia, tôi đã tìm thấy một phương pháp trong mô-đun IMAP giúp:

require "net/imap"
Net::IMAP.decode_utf7(mail_body)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.