Jetez un oeil à ce link de W3, il me dit que:
In HTML, there is a list of some built-in character names like é
for é but XML does not have this. In XML, there are only five built-in character entities: <
, >
, &
, "
and '
for <, >, &, " and ' respectively. You can define your own entities in a Document Type Definition, or you can use any Unicode character (see next item).
In HTML, there are also numeric character references, such as &
for &. You can refer to any Unicode character, but the number is decimal, whereas in the Unicode tables the number is usually in hexadecimal. XML also allows hexadecimal references: &
for example.
Cela m'amène à croire que, é
pourrait fonctionner pour un caractère é.
également les informations à ce link de Microsoft indique que:
SQLXML 4.0 relies upon the limited support for DTDs provided in SQL Server. SQL Server allows for an internal DTD in xml data type data, which can be used to supply default values and to replace entity references with their expanded contents. SQLXML passes the XML data "as is" (including the internal DTD) to the server. You can convert DTDs to XML Schema (XSD) documents using third-party tools, and load the data with inline XSD schemas into the database.
Mais tout cela ne vous aidera pas si vous n'avez pas de contrôle sur le flux XML entrant. Je doute qu'il soit possible d'enregistrer un é (ou n'importe quel caractère spécial à l'exception des entités de caractères intégrées mentionnées ci-dessus) dans un document XML dans un champ XML SQL Server, sans ajouter de DTD ou remplacer le caractère par sa contrepartie de référence hexadécimale. Dans les deux cas, vous devrez pouvoir modifier le code XML avant qu'il ne pénètre dans la base de données.
Juste un exemple rapide pour tous ceux qui veulent descendre le "ajout d'une DTD" route.
Voici comment ajouter une DTD interne dans un fichier xml qui déclare une entité pour un caractère é:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ENTITY eacute "é">]>
<root>
<RegionName>Québec</RegionName>
</root>
Si vous allez here et effectuez une recherche sur la page « Ctrl + F » pour « eacute », vous finissez dans une liste avec des exemples pour d'autres caractères que vous pourriez simplement copier et coller dans votre propre DTD interne.
Modifier
Vous pouvez ajouter toutes les entités de cours car ils sont spécifiées au link ci-dessus: <!ENTITY eacute "é"><!ENTITY .. // Next entity>
, ou tout simplement les copier de ce file. Je comprends que l'ajout d'une DTD interne à chaque fichier XML que vous ajoutez à la base de données n'est pas une bonne idée. Je serais intéressé de savoir si l'ajouter pour 1 fichier résout votre problème si.
Le serveur I * think * sql utilise l'encodage utf-16 et la déclaration 'utf-8' dans le fichier xml explique pourquoi il échoue. FWIW, si vous supprimez complètement la déclaration 'encoding', ou si vous la remplacez par' encoding = "UTF-16" 'l'insertion réussit dans CF10, avec le paramètre" Activer les caractères ASCII élevés ... "activé. (Changer l'encodage de la chaîne n'a aucun effet.) Cependant, je ne sais pas si cela a des effets secondaires négatifs. – Leigh
Note, l'encodage des caractères est * pas * mon fort ;-) Mon commentaire ci-dessus est basé sur quelques tests rapides seulement. Ce n'est pas une réponse solide, mais j'espère que cela pourrait vous aider à vous orienter dans la bonne direction. – Leigh
Comment recevez-vous le XML? J'ai l'impression que vous ne dites pas aux FC que c'est de l'UTF-8. –