Конфликт кодировки протокола, ESMTP против XML в теле письма - PullRequest
2 голосов
/ 24 июня 2010

У нас есть процесс, в котором XML передается нам через ESMTP в теле письма. Набор символов в теле письма указан как ISO-8859-1 , и для XML не указана кодировка. Согласно протоколу значение по умолчанию - UTF-8 .

Проблема в том, что наш синтаксический анализатор XML выдает исключение, когда встречает символ ®, потому что считает, что выполняет синтаксический анализ UTF-8 , а символ ® в UTF-8 равен 2 байты, а не 1, как в ISO-8859-1 .

  1. Должны ли мы предполагать, что это тело ISO-8859-1 и, таким образом, переопределять кодировку XML ( UTF-8 )?
  2. Субъективно, является ли электронное письмо отправленным неправильно, и было бы лучше, если бы мы попытались интерпретировать как UTF-8 на нашей стороне или спросить, кто бы ни отправлял его, правильно и последовательно указать кодировку

Вот пример тела письма с XML:

Delivered-To: ...
Received: ...
Received: ...
Return-Path: ...
Received: ...
Received-SPF: ...
Authentication-Results: ...
Received: ...
Thread-Topic: ...
From: ...
To: ...
Subject: ...
Date: ...
Message-ID: ...
MIME-Version: 1.0
Content-Type: text/plain;
 charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
X-Mailer: Microsoft CDO for Windows 2000
Content-Class: urn:content-classes:message
Importance: normal
Priority: normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.4325

<?xml version="1.0"?>
...
   <comments>Super Widget®</comments>
...

1 Ответ

1 голос
/ 31 июля 2010

В спецификации XML в приложении F говорится об обнаружении кодировки:

Кроме того, во многих случаях доступны другие источники информации в дополнение к потоку данных XML ifself.

Так что да, при отсутствии encoding="..." в самом потоке XML, вы должны полагаться на внешний источник, который в данном случае является заголовком Content-Type.

...