2010-06-24 4 views
2

Nous avons un processus dans lequel XML nous est transféré via ESMTP dans un corps de l'e-mail. Le jeu de caractères du corps de l'e-mail est défini en tant que ISO-8859-1 et aucun codage n'est spécifié pour le code XML. Selon le protocole, la valeur par défaut est UTF-8.Conflit de charset de protocole, ESMTP vs. XML dans un corps de l'e-mail

Le problème est notre analyseur XML est de lancer une exception lorsqu'il rencontre le caractère ® parce qu'il pense qu'il est l'analyse syntaxique UTF-8, et le caractère ® dans UTF-8 est de 2 octets, et non 1 comme dans ISO-8859-1.

  1. Si nous supposons que le corps est ISO-8859-1 et ainsi remplacer les encodage XML (UTF-8)? Plus subjectivement, est l'email envoyé incorrectement, et serait-il préférable pour nous d'essayer d'interpréter comme UTF-8 de notre côté ou demander à celui qui l'envoie de spécifier correctement et de manière cohérente l'encodage?

est ici un corps e-mail de l'échantillon avec 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> 
... 

Répondre

1

Le XML specification dit en annexe F, en ce qui concerne la détection d'encodage:

En outre, dans de nombreux cas, d'autres sources d'information sont disponibles en plus du flux de données XML ifself.

Alors oui, en l'absence d'un encoding="..." dans le flux XML lui-même, vous devez compter sur la source externe, qui dans ce cas est l'en-tête Content-Type.