SSIS - Fichier plat toujours ANSI jamais codé en UTF-8
Ont une assez simple package SSIS:
- Source OLE DB pour obtenir des données via un point de vue, (toutes les colonnes de la chaîne dans la table db de type nvarchar ou nchar).
- Colonne dérivée à l'existant de format de la date et de l'ajouter à l'ensemble de données, (type de données DT_WSTR).
- Multidiffusion tâche de diviser le jeu de données entre:
- OLE DB Commande mettre à jour des lignes comme "traitement".
- Destination de fichier plat - le gestionnaire de connexion de ce qui est mis à la Page de Code 65001 UTF-8 Unicode n'est pas cochée. Toutes les colonnes de la chaîne de la carte DT_WSTR.
Chaque fois que j'exécute ce paquet ouvert le fichier plat dans Notepad++ sa ANSI, jamais UTF-8. Si je coche l'option Unicode, le fichier est UCS-2 Little-Endian.
Je fais quelque chose de mal - comment puis-je obtenir le fichier à plat pour être codé en UTF-8?
Grâce
source d'informationauteur Neil
Vous devez vous connecter pour publier un commentaire.
Dans la Source -> l'Avance de l'Éditeur -> Propriétés du Composant ->
Jeu de Page de Code par Défaut pour 65001
AlwaysUseDefaultCodePage à Vrai
Puis->l'Avance de l'Éditeur -> l'Entrée Et la Sortie des Propriétés
Vérifiez Chaque Colonne Externe des Colonnes et des Colonnes de Sortie et de définir CodePage 65001 dans la mesure du possible.
.
Par la façon dont Excel ne peut pas définir les données à l'intérieur du fichier UTF - 8. Excel est un gestionnaire de fichier. Vous pouvez créer des fichiers csv à l'aide du bloc-notes aussi. aussi longtemps que vous remplissez le fichier csv avec UTF-8, vous devriez être bien.
L'ajout d'explications pour les réponses ...
paramètre de la page de Codes à 65001 (mais ne cochez PAS l'Unicode case à cocher sur le fichier source), devrait générer un fichier UTF-8. (oui, les types de données à l'interne devrait également être de type nvarchar, etc).
Mais le fichier est produit à partir de SSIS ne dispose pas d'un en-tête de NOMENCLATURE (Octet de Commande de Marqueur), de sorte que certains programmes supposerons qu'il est toujours en ASCII, pas en UTF-8. J'ai vu cette confirmée par MME employés sur MSDNainsi que confirmé par des essais.
Le fichier ajout de la solution est un moyen de contourner ce problème par la création d'un fichier vide AVEC le bon MOB, puis ajouter des données à partir de SSIS, la NOMENCLATURE en-tête reste en place. Si vous dites SSIS de remplacer le fichier, il perd également de la NOMENCLATURE.
Merci pour les conseils ici, il m'a aidé à comprendre le détail ci-dessus.
J'ai récemment travaillé sur un problème où nous nous trouvons dans une situation telle que la suivante:
Vous travaillez sur une solution à l'aide de SQL Server Integration Services(Visual Studio 2005).
Vous êtes de l'extraction de données à partir de votre base de données et d'essayer de placer les résultats dans un fichier plat (.CSV) au format UTF-8. La solution exporte les données parfaitement et garde les caractères spéciaux dans le fichier parce que vous avez utilisé 65001 que la page de code.
Cependant, le fichier texte lorsque vous l'ouvrez ou que vous essayez de charger un autre processus, il dit que le fichier est ANSI au lieu de UTF-8. Si vous ouvrez le fichier dans le bloc-notes et faire un ENREGISTRER sous et changer l'encodage UTF-8 et ensuite, votre processus externe fonctionne, mais c'est un travail manuel pénible.
Ce que j'ai constaté que lorsque vous spécifiez le Code de la Page de propriété de l'appartement gestionnaire de connexions de fichiers, il ne génère un fichier UTF-8. Toutefois, il génère une version du fichier UTF-8 qui manque quelque chose que nous appelons la Marque d'Ordre d'Octet.
Donc si vous avez un fichier CSV contenant le caractère AA, la NOMENCLATURE UTF8 sera 0xef, 0xbb et 0xbf. Même si le fichier n'a pas de NOMENCLATURE, il est toujours UTF8.
Malheureusement, dans certains vieux systèmes hérités, les applications de recherche pour le BOM pour déterminer le type de fichier. Il semble que votre processus est également faire le même.
Pour contourner le problème, vous pouvez utiliser le bout de code suivant dans votre tâche de script qui peut être couru après le processus d'exportation.
lorsque vous exécutez le package, vous trouverez que tous les volumes csv dans le dossier désigné sera converti en UTF8 format qui contient la marque d'ordre d'octet.
De cette façon, votre processus externe sera en mesure de travailler avec l'exportation de fichiers CSV.
si vous êtes à la recherche uniquement pour le dossier...envoyer cette variable à la tâche de script et d'utilisation ci-dessous..
J'espère que cela aide!!
OK - semblait avoir trouvé un travail satisfaisant de SQL Server Forums. En fait, j'ai dû créer deux UTF-8 fichiers de modèle, l'utilisation d'un Fichier de travail afin de les copier sur ma destination, alors assurez-vous que j'étais ajout de données plutôt que de les écraser.