Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes
Révision précédente
|
Dernière révision
Les deux révisions suivantes
|
fichier_acces_direct [2008/12/21 09:22] tyrtamos |
fichier_acces_direct [2008/12/21 11:22] tyrtamos |
| |
C'est assez facile pour l'enregistrement de chaines de caractères, à une exception près: attention aux encodages unicode qui "consomment" plus de place en octets qu'il n'y a de caractères imprimables! Il serait d'ailleurs sage qu'il y ait dans le code en même temps une vérification/alerte de dépassement et un tronquage pour éviter qu'une chaine trop longue ne recouvre le début de l'enregistrement suivant. | C'est assez facile pour l'enregistrement de chaines de caractères, à une exception près: attention aux encodages unicode qui "consomment" plus de place en octets qu'il n'y a de caractères imprimables! Il serait d'ailleurs sage qu'il y ait dans le code en même temps une vérification/alerte de dépassement et un tronquage pour éviter qu'une chaine trop longue ne recouvre le début de l'enregistrement suivant. |
| |
Si vous voulez évaluer le nombre d'octets nécessaire pour stocker une chaine encodée en utf-8, sur la base de statistiques, vous pouvez créer cette fonction: | |
| |
<code python> | |
def lenunic(ch): | |
n = 0 | |
for c in ch: | |
n += 1 + int((ord(c) > 255)) | |
return n | |
| |
x = u"éèàçôîêöùλ" | |
print len(x) # => affiche 10 (il y a bien 10 lettres) | |
print lenunic(x) # => affiche 11, car les 10 lettres codées en utf-8 prendront 11 octets à cause de la dernière lettre "λ": ord(u"λ")=955 | |
</code> | |
| |
Pour conserver cette longueur d'une session à l'autre, quand il n'y a qu'un seul programme qui accède au fichier, on peut la conserver dans le programme en la codant "en dur" (exemple: lge = 25). | Pour conserver cette longueur d'une session à l'autre, quand il n'y a qu'un seul programme qui accède au fichier, on peut la conserver dans le programme en la codant "en dur" (exemple: lge = 25). |