Affichage des articles dont le libellé est encoding. Afficher tous les articles
Affichage des articles dont le libellé est encoding. Afficher tous les articles

vendredi 19 février 2016

java, iso-8859-1 & utf-8

Ahhhh, ces encodings !

Bref, pour rappel :

dimanche 14 septembre 2014

Fichiers, ajout/retrait BOM dans un fichier

Il est possible d'ajouter/retirer le caractère bom en début de fichier en utilisant la commande uconv.



Exemple d'utilisation :

mercredi 10 octobre 2012

python, faire en sorte que stdin/stdout lisent et écrivent en binaire

J'ai écrit un petit programme qui s'inspire de cut en python.

La lecture et l'écriture pouvant se faire sur l'entrée/sortie standard (sources ucut), j'avais des problèmes de "'ascii' codec can't decode byte"...

Pour y remédier, j'ai "transformé" les flux standard (mode texte) en flux binaires de la manière suivante :



python, binary, os, fileno

mardi 25 septembre 2012

java, déboires d'encoding...

Il y a quelques temps, j'ai eu de petits problèmes d'affichage d'accents sur une IHM d'un fichier qui était fourni par une autre appplication.

Le charset n'était pas le bon.

Il a fallu que je force l'écriture du charset et sa lecture.

Pour l'écriture :



Pour la lecture :




java, encoding, charset, utf-8, iso-8859

vendredi 20 juillet 2012

python, ouvrir un fichier en utf8

Pour ouvrir un fichier en utilisant un encodage particulier, il est possible de passer par le module codecs...
with codecs.open('the_file.csv', 'r', 'utf8') as f:
    l = f.readline()
    ...

mardi 17 juillet 2012

Servlets et encoding...

J'ai eu des petit soucis avec le charset...

Un svi envoyait bien "text/csv; charset=utf-8" (curl) mais pour une raison x ou y, mon ihm qui l'appelait voyait "text/plain;charset=ISO-8859-1" ce qui faisait que le fichier était mal affiché.

Dans le code ci-dessous, j'ouvre une connection et récupère le charset afin d'initialiser l'InputStreamReader et commencer les lectures...
        URL url = new URL(sviUrl);
        URLConnection conn = url.openConnection();  
        conn.connect();
        InputStream in = null;
        try {
            String charset = "ISO-8859-1";
            String contentType = conn.getContentType(); 
            if (contentType != null && contentType.indexOf(";charset=") >= 0) {
                contentType = contentType.substring(contentType.indexOf(";charset=")+9);
                charset = contentType.trim();
            }
            in = conn.getInputStream();
            InputStreamReader inr = new InputStreamReader(url.openStream(), charset);
            Writer out = resp.getWriter();
            try {
                IOUtils.copy(inr, out);
            } finally {
                inr.close();
            }
        } finally {
            if (in != null) {
                in.close();
            }
        }

lundi 16 juillet 2012

python, unicode...

>>> unicodedata.name(u"é")
'LATIN SMALL LETTER E WITH ACUTE'
>>> print u"e accent aigu : \N{LATIN SMALL LETTER E WITH ACUTE}"
e accent aigu : é

python, bash et encoding...

En python, lorsque la sortie n'est pas de type tty, l'encoding est "ascii" ce qui provoque des erreurs sur les caractères accentués. La solution est d'exporter la variable PYTHONIOENCODING qui définit l'encoding à utiliser.
$ python a.py 
é
$ python a.py | cat
Traceback (most recent call last):
  File "a.py", line 3, in 
    print u"\xe9";
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 0: 
ordinal not in range(128)
$ export PYTHONIOENCODING=utf-8 
$ python a.py | cat
é
$
Une autre solution est de changer l'encoding de stdout...
#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import codecs
import locale

sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)

print u"é"

vendredi 4 mai 2012

python, conversion d'un fichier d'iso8859 en utf8

#!/bin/python

import sys

if len(sys.argv) != 3:
    print 'usage: python iso8859toutf8.py [infile] [outfile]'
    sys.exit(0)

with open(sys.argv[2], 'w') as fout:
    with open(sys.argv[1], 'r') as fin:
        data = fin.read().decode('iso8859')
        while data:
            fout.write(data.encode('utf8'))
            data = fin.read().decode('iso8859')