Ahhhh, ces encodings !
Bref, pour rappel :
J'entrepose ici mes découvertes linux, bash, python et java que je souhaite partager et mettre de côté...
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
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 :
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 :
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 :
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...
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')
Inscription à :
Articles (Atom)