Accueil > 4 Divers > Tester l’import CSV – la question du jeu de caractères

Tester l’import CSV – la question du jeu de caractères

Pour tester l’import d’un fichier CSV il est question du jeux de caractères UTF-8 ou iso-8859-1 dans l’écran d’importation de Prestashop.

Si vous essayez en partant d’un fichier Excel avec des lettres accentuées enregistré sous format CSV avec le séparateur « point virgule » vous allez voir vos lettres accentuées massacrées et des cafouillages lors de l’import.

Le problème c’est qu’avec Excel, on ne choisit pas son jeu de caractère.

la solution est donnée par 6ma : passer par open office qui permet de préciser comment enregistrer le fichier .csv lors de l’enregistrement.

J’ai testé le format ISO 8859-1 mais avec toujours les même problèmes. Par contre tout s’est bien passé en passant par UTF-8.

  1. Alain
    janvier 14, 2010 à 4:45

    Hello,

    Il est simple et parfaitement possible d’encoder les caractères en UTF-8 avec Microsoft Excel. Il suffit pour cela d’écrire une macro qui réalise l’encodage.

    Par exemple ci-dessous permet l’encodage, le décodage et le test.

    De la même façon, il est simple d’ecrire une autre macro qui va générer automatiquement le fichier CSV parfaitement formaté directement à partir d’Excel.

    Cordialement, Alain
    PS: Je ne sais pas publier sur ce site un fichier Excel d’exemple…dommage

    ‘ Char. number range | UTF-8 octet sequence
    ‘ (hexadecimal) | (binary)
    ‘ ——————–+———————————————
    ‘ 0000 0000-0000 007F | 0xxxxxxx
    ‘ 0000 0080-0000 07FF | 110xxxxx 10xxxxxx
    ‘ 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
    ‘ 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    Public Function Encode_UTF8(astr As String) As String
    Dim c As Integer
    Dim n As Integer
    Dim utftext As String

    utftext = «  »
    n = 1
    Do While n <= Len(astr)
    c = AscW(Mid(astr, n, 1))
    If c = 128) And (c = 2048) And (c = 65536
    utftext = utftext + Chr(((c \ 262144) Or 240))
    utftext = utftext + Chr(((((c \ 4096) And 63)) Or 128))
    utftext = utftext + Chr((((c \ 64) And 63) Or 128))
    utftext = utftext + Chr(((c And 63) Or 128))
    End If
    n = n + 1
    Loop
    Encode_UTF8 = utftext
    End Function

    ‘ Char. number range | UTF-8 octet sequence
    ‘ (hexadecimal) | (binary)
    ‘ ——————–+———————————————
    ‘ 0000 0000-0000 007F | 0xxxxxxx
    ‘ 0000 0080-0000 07FF | 110xxxxx 10xxxxxx
    ‘ 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
    ‘ 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    Public Function Decode_UTF8(astr)
    Dim c0, c1, c2, c3
    Dim n
    Dim unitext

    If isUTF8(astr) = False Then
    Decode_UTF8 = astr
    Exit Function
    End If

    unitext = «  »
    n = 1
    Do While n <= Len(astr)
    c0 = Asc(Mid(astr, n, 1))
    If n <= Len(astr) – 1 Then
    c1 = Asc(Mid(astr, n + 1, 1))
    Else
    c1 = 0
    End If
    If n <= Len(astr) – 2 Then
    c2 = Asc(Mid(astr, n + 2, 1))
    Else
    c2 = 0
    End If
    If n <= Len(astr) – 3 Then
    c3 = Asc(Mid(astr, n + 3, 1))
    Else
    c3 = 0
    End If

    If (c0 And 240) = 240 And (c1 And 128) = 128 And (c2 And 128) = 128 And (c3 And 128) = 128 Then
    unitext = unitext + ChrW((c0 – 240) * 65536 + (c1 – 128) * 4096) + (c2 – 128) * 64 + (c3 – 128)
    n = n + 4
    ElseIf (c0 And 224) = 224 And (c1 And 128) = 128 And (c2 And 128) = 128 Then
    unitext = unitext + ChrW((c0 – 224) * 4096 + (c1 – 128) * 64 + (c2 – 128))
    n = n + 3
    ElseIf (c0 And 192) = 192 And (c1 And 128) = 128 Then
    unitext = unitext + ChrW((c0 – 192) * 64 + (c1 – 128))
    n = n + 2
    ElseIf (c0 And 128) = 128 Then
    unitext = unitext + ChrW(c0 And 127)
    n = n + 1
    Else ' c0 < 128
    unitext = unitext + ChrW(c0)
    n = n + 1
    End If
    Loop

    Decode_UTF8 = unitext
    End Function

    ' Char. number range | UTF-8 octet sequence
    ' (hexadecimal) | (binary)
    ' ——————–+———————————————
    ' 0000 0000-0000 007F | 0xxxxxxx
    ' 0000 0080-0000 07FF | 110xxxxx 10xxxxxx
    ' 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
    ' 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    Public Function isUTF8(astr)
    Dim c0, c1, c2, c3
    Dim n

    isUTF8 = True
    n = 1
    Do While n <= Len(astr)
    c0 = Asc(Mid(astr, n, 1))
    If n <= Len(astr) – 1 Then
    c1 = Asc(Mid(astr, n + 1, 1))
    Else
    c1 = 0
    End If
    If n <= Len(astr) – 2 Then
    c2 = Asc(Mid(astr, n + 2, 1))
    Else
    c2 = 0
    End If
    If n <= Len(astr) – 3 Then
    c3 = Asc(Mid(astr, n + 3, 1))
    Else
    c3 = 0
    End If

    If (c0 And 240) = 240 Then
    If (c1 And 128) = 128 And (c2 And 128) = 128 And (c3 And 128) = 128 Then
    n = n + 4
    Else
    isUTF8 = False
    Exit Function
    End If
    ElseIf (c0 And 224) = 224 Then
    If (c1 And 128) = 128 And (c2 And 128) = 128 Then
    n = n + 3
    Else
    isUTF8 = False
    Exit Function
    End If
    ElseIf (c0 And 192) = 192 Then
    If (c1 And 128) = 128 Then
    n = n + 2
    Else
    isUTF8 = False
    Exit Function
    End If
    ElseIf (c0 And 128) = 0 Then
    n = n + 1
    Else
    isUTF8 = False
    Exit Function
    End If
    Loop
    End Function

  2. août 5, 2010 à 12:52

    Merci pour toutes ces explications

  3. août 29, 2011 à 12:04

    en effet c’est « simple » depuis Excel !

  4. août 31, 2011 à 7:14

    Vous pouvez aussi ensuite ré-ouvrir le fichier .csv avec le notepad de Windows et le sauver en utf-8, cela évite l’installation d’un logiciel tiers.

  5. avril 21, 2015 à 11:57

    Habituellement j’ouvre le fichier .csv avec notepad++ puis je convertis en ANSI

  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

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 cette page :