Comment créer un fichier CSV UTF-8 incluant le BOM avec C#

Introduction

Ce billet est dédié à une situation que j’ai eu à personnellement prendre d’assaut dernièrement. Cette situation est très spécifique au domaine d’affaires d’un client que je supporte.

L’idée est que le site accepte des inscriptions par un formulaire. Ces inscriptions sont ensuite enregistrées dans une base de données pour être ensuite exportées dans un fichier CSV. Une fois dans ce fichier, ces inscriptions seront importées dans une liste de contact pour un envoi d’infolettre.

Vous me suivez jusque là? Super.

Votre fichier UTF-8 moyen, en mal de vivre.

Votre fichier UTF-8 moyen, en mal de vivre.

Parfois, ce client aime bien manipuler la liste d’inscription, dans le format CSV, avant de faire l’importation dans son courrielleur. La méthode commune est d’ouvrir le fichier directement avec Microsoft Excel. Ce dernier va reconnaître le fichier comme une feuille de données et vous pourrez la manipuler de façon transparente, comme un fichier Excel.

Or, il s’avère que Microsoft Excel a de la difficulté à détecter l’encodage d’un fichier UTF-8 l’élément nommé le Byte Order Mark (BOM). Cela veut dire que vos fichiers CSV auront toujours l’air du fichier texte de la prise d’écran ci-haut, à moins que vous interveniez.

Traditionnellement, avec les fichiers UTF-8, le BOM est utilisé pour détecter la validité de l’encodage de ces fichiers.  Pour déterminer si un fichier est réellement UTF-8, un éditeur texte tentera de valider la présence de ces octets au tout début du fichier.

Bref, si vous le faites, vous mettez les chances de votre côté.

Comment faire?

AVERTISSEMENT

La solution à appliquer peut varier énormément selon le contexte où vous vous trouvez. Dans mon cas, j’ai eu à utiliser une technique assez bas niveau. Le côté positif de cette technique est qu’elle peut être utilisée dans presque tous les contextes.

Le code que vous allez voir est l’idée générale derrière la  véritable solution que j’ai employée pour générer le fichier CSV de mon client. Vous allez comprendre lorsque vous allez le lire.

La technique utilisée fait en sorte que le BOM est ajouté immédiatement dans les premiers octets du fichier texte généré. Le BOM est la valeur retournée par la méthode GetPreamble() de la classe UTF8Encoding lorsque la valeur true est envoyée au constructeur.

D’ailleurs,  à titre informatif, le nom du paramètre du constructeur est encoderShouldEmitUTF8Identifier. Le nom est assez évocateur. Dans ce cas-ci, vous désirez un fichier UTF-8 alors vous laissez cette valeur à true.

nodepad-utf-8-encodingDe plus, la preuve ultime que cette solution fonctionne se prouve avec notepad++. L’éditeur texte détecte le fichier comme ayant un encodage UTF-8 pur!

Advertisements

Laisser un commentaire

Entrer les renseignements ci-dessous ou cliquer sur une icône pour ouvrir une session :

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l’aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment ce contenu :