2009-04-11 9 views
7

Jak dobrze obsługiwany jest koder UTF-8 w różnych klientach poczty e-mail?Jak dobrze obsługuje się kodowanie UTF-8 w wiadomości e-mail?

Wiem, że pięć lat temu był to problem, ale czy nadal jest czymś, o co powinniśmy się martwić?

Zastanawiam się, czy powinienem ponownie kodować łańcuchy do innych kodowań przed wysłaniem. Na przykład rosyjski tekst będzie przechowywany jako UTF-8, ale podczas wysyłania powiadomień e-mail mógłbym go ponownie zakodować w locie jako ISO-8859-5.

Odpowiedz

8

Oto comparison z niemal każdym klientem poczty elektronicznej i czy obsługuje UTF-8

Plus, wikipedia mówi:

Internet Mail Consortium (IMC) zaleca, aby wszystkie programy pocztowe być można wyświetlać i tworzyć pocztę za pomocą UTF-8.

Ale możesz również wysłać wiadomość e-mail w wielu formatach, jeśli chcesz.

+0

Niestety, porównanie nie obejmuje starych wersji. –

3

Jedynym miejscem, w którym UTF-8 może być problematyczny, jest Japonia, w której co najmniej kilka lat temu wiele usług poczty internetowej i starszych urządzeń przenośnych wciąż nie radziło sobie z tym płynnie. To trochę smutne, zwłaszcza że natywne kodowania wielobajtowe (Shift-JIS, ISO-2022-JP itp.) Są jednakowo okropne.

Inne kraje Azji Wschodniej ze znakami wielobajtowymi mogą również podlegać wpływom.

0

Dziś, gdy ponownie kodujemy rosyjski tekst UTF-8 jako ISO-8859-5, istnieje ryzyko stłuszczenia nowej waluty rubla rosyjskiego UTF-8 U + 20BD RUBLE SIGN. To jest ten sam problem z obsługą znaków walut euro w ISO-8859-1 (Latin1), co nie ma znaczenia. znalazłem te artykuły bardzo pomocny o międzynarodowe wsparcie w postaci wiadomości e-mail http://kb.mailchimp.com/accounts/management/international-characters-in-mailchimp https://wordtothewise.com/2010/03/which-is-better-utf-8-or-iso/

Oto przykładowy kod C# za błąd strony kodowej ISO-8859-5 i rosyjskiego rubla waluty znak:

using System; 
using System.Text; 

namespace ConsoleApplication4 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     string russian_text = "Русский текст co знаком валюты рубля ₽"; 

     Console.OutputEncoding = Encoding.UTF8; 
     Console.WriteLine(russian_text); 

     var encoded_bytes = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("ISO-8859-5"), Encoding.UTF8.GetBytes(russian_text)); 

     Console.OutputEncoding = Encoding.GetEncoding("ISO-8859-5"); 
     Console.WriteLine(Encoding.GetEncoding("ISO-8859-5").GetString(encoded_bytes)); 
    } 
} 

}