Je dois exploiter un fichier issu d'une Bas de données sous Mac. Je
reçois un fichier type CSV qui est très probablement codé en MAC OS
ROMAN, du moins il n'est pas en Latin-1, Windows-1252, ni UTF-8, car il
produit des caractères non reconnus.
Je passe sur le pourquoi, disons que je dois m'efforcer d'afficher ce
contenu dans des pages web qui seront en UTF-8.
J'ai touuvé (dans les contributions de http://fr3.php.net/htmlentities)
cette fonction qui encode en ISO-8859-1 :
<?php
/**
* Converts MAC OS ROMAN encoded strings to the ISO 8859-1 charset.
*
* @param string the string to convert.
* @return string the converted string.
*/
function mac_roman_to_iso($string)
{
return strtr($string,
"\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa1\xa4\xa6\xa7\xa8\xab\xac\xae\xaf\xb4\xbb\xbc\xbe\xbf\xc0\xc1\xc2\xc7\xc8\xca\xcb\xcc\xd6\xd8\xdb\xe1\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf1\xf2\xf3\xf4\xf8\xfc\xd2\xd3\xd4\xd5Ð",
"\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\xb0\xa7\xb6\xdf\xae\xb4\xa8\xc6\xd8\xa5\xaa\xba\xe6\xf8\xbf\xa1\xac\xab\xbb\xa0\xc0\xc3\xf7\xff\xa4\xb7\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\xd2\xda\xdb\xd9\xaf\xb8\x22\x22\x27\x27-");
}
?>
Ensuite j'utilise quelque chose comme :
mb_convert_encoding($str, 'UTF-8', 'ISO-8859-1');
pour passer en UTF-8.
Cela fonctionne assez bien mais le problème est qu'il reste des
caractères non reconnus, ou plutôt mal reconnus. Je suppose que la
focntion ne convertit pas tous les caractères problématiques, mais je
n'ai pas réussi à la modifier correctement (lorsque je rajoute des
caractères j'obtiens de résultats inattendus alors que je suis le
tableau de http://en.wikipedia.org/wiki/Mac_OS_Roman).
J'ai essayé de reproduire une fonction qui convertirait directement en
UTF-8 (avec les infos trouvées sur :
http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/ROMAN.TXT) mais ça
ne fonctionne pas. De nombreuses subtilités doivent m'échapper.
PHP peut-il encoder directement du MAC ROMAN en ISO ? Connaissez-vous
une méthode efficace pour pallier le manque éventuel des fonctions
natives de PHP ?
Je dois exploiter un fichier issu d'une Bas de données sous Mac. Je reçois un fichier type CSV qui est très probablement codé en MAC OS ROMAN, du moins il n'est pas en Latin-1, Windows-1252, ni UTF-8, car il produit des caractères non reconnus.
Je passe sur le pourquoi, disons que je dois m'efforcer d'afficher ce contenu dans des pages web qui seront en UTF-8.
[...]
PHP peut-il encoder directement du MAC ROMAN en ISO ? Connaissez-vous une méthode efficace pour pallier le manque éventuel des fonctions natives de PHP ?
Je dois exploiter un fichier issu d'une Bas de données sous Mac. Je
reçois un fichier type CSV qui est très probablement codé en MAC OS
ROMAN, du moins il n'est pas en Latin-1, Windows-1252, ni UTF-8, car il
produit des caractères non reconnus.
Je passe sur le pourquoi, disons que je dois m'efforcer d'afficher ce
contenu dans des pages web qui seront en UTF-8.
[...]
PHP peut-il encoder directement du MAC ROMAN en ISO ? Connaissez-vous
une méthode efficace pour pallier le manque éventuel des fonctions
natives de PHP ?
As-tu essayé avec iconv() <http://fr2.php.net/iconv> pour encoder
directement de MacRoman en UTF-8 ?
Je dois exploiter un fichier issu d'une Bas de données sous Mac. Je reçois un fichier type CSV qui est très probablement codé en MAC OS ROMAN, du moins il n'est pas en Latin-1, Windows-1252, ni UTF-8, car il produit des caractères non reconnus.
Je passe sur le pourquoi, disons que je dois m'efforcer d'afficher ce contenu dans des pages web qui seront en UTF-8.
[...]
PHP peut-il encoder directement du MAC ROMAN en ISO ? Connaissez-vous une méthode efficace pour pallier le manque éventuel des fonctions natives de PHP ?
Il suffit (!) de faire une fonction PHP qui remplace les caractères dont les numéros vont de 128 à 255, soit par l'entité nommée HTML, soit par l'entité numérique HTML (en décimal ou en hexa), soit par l'encodage UTF-8 correspondant au numéro du caractère. Pour les caractères compris entre 32 et 126 il n'y a rien à faire (pour ceux-là, on a MacRoman ASCII = UTF-8).
Je prends comme exemple le premier caractère au dela d'ASCII, celui de numéro 128.
Le tableau t'indique : Character : Ä Macintosh Number : 128 Unicode Number : 196 Macintosh Hex : 0x80 Unicode Hex : U+00C4 HTML 4.0 Entity : Ä
Tu peux donc remplacer un caractère dont le numéro est 128 (0x80 en hexa), soit par la chaîne Ä (directement l'entité HTML 4.0), soit par la chaîne Ä ('&' + '#' + Unicode Number + ';'), soit par la chaîne Ä ('&' + '#' + 'x' + Unicode hex + ';'), soit par la transformation UTF-8 du numéro 196. Je suppose que le code existe tout fait quelque part, mais je ne l'ai pas trouvé sur le net.
Bon, mais ce serait quand même plus simple si ton hébergement OVH avait iconv d'installé !
As-tu essayé avec iconv() <http://fr2.php.net/iconv> pour encoder
directement de MacRoman en UTF-8 ?
Je ne pense pas qu'il soit possible d'installer iconv sur cet
hébergement mutualisé (OVH).
Pose quand même la question, il est très possible qu'il soit présent par
défaut (d'après la doc, c'est toujours le cas en PHP5).
Sinon, tu peux regarder par exemple ici :
<http://www.alanwood.net/demos/macroman.html>.
Il suffit (!) de faire une fonction PHP qui remplace les caractères dont
les numéros vont de 128 à 255, soit par l'entité nommée HTML, soit par
l'entité numérique HTML (en décimal ou en hexa), soit par l'encodage
UTF-8 correspondant au numéro du caractère. Pour les caractères compris
entre 32 et 126 il n'y a rien à faire (pour ceux-là, on a MacRoman ASCII = UTF-8).
Je prends comme exemple le premier caractère au dela d'ASCII, celui de
numéro 128.
Le tableau t'indique :
Character : Ä
Macintosh Number : 128
Unicode Number : 196
Macintosh Hex : 0x80
Unicode Hex : U+00C4
HTML 4.0 Entity : Ä
Tu peux donc remplacer un caractère dont le numéro est 128 (0x80 en
hexa), soit par la chaîne Ä (directement l'entité HTML 4.0),
soit par la chaîne Ä ('&' + '#' + Unicode Number + ';'), soit
par la chaîne Ä ('&' + '#' + 'x' + Unicode hex + ';'), soit par
la transformation UTF-8 du numéro 196. Je suppose que le code existe
tout fait quelque part, mais je ne l'ai pas trouvé sur le net.
Bon, mais ce serait quand même plus simple si ton hébergement OVH avait
iconv d'installé !
Il suffit (!) de faire une fonction PHP qui remplace les caractères dont les numéros vont de 128 à 255, soit par l'entité nommée HTML, soit par l'entité numérique HTML (en décimal ou en hexa), soit par l'encodage UTF-8 correspondant au numéro du caractère. Pour les caractères compris entre 32 et 126 il n'y a rien à faire (pour ceux-là, on a MacRoman ASCII = UTF-8).
Je prends comme exemple le premier caractère au dela d'ASCII, celui de numéro 128.
Le tableau t'indique : Character : Ä Macintosh Number : 128 Unicode Number : 196 Macintosh Hex : 0x80 Unicode Hex : U+00C4 HTML 4.0 Entity : Ä
Tu peux donc remplacer un caractère dont le numéro est 128 (0x80 en hexa), soit par la chaîne Ä (directement l'entité HTML 4.0), soit par la chaîne Ä ('&' + '#' + Unicode Number + ';'), soit par la chaîne Ä ('&' + '#' + 'x' + Unicode hex + ';'), soit par la transformation UTF-8 du numéro 196. Je suppose que le code existe tout fait quelque part, mais je ne l'ai pas trouvé sur le net.
Bon, mais ce serait quand même plus simple si ton hébergement OVH avait iconv d'installé !
dwojylac.nospam
Sebastien wrote:
Je dois exploiter un fichier issu d'une Bas de données sous Mac. Je reçois un fichier type CSV qui est très probablement codé en MAC OS ROMAN, du moins il n'est pas en Latin-1, Windows-1252, ni UTF-8, car il produit des caractères non reconnus.
Je passe sur le pourquoi, disons que je dois m'efforcer d'afficher ce contenu dans des pages web qui seront en UTF-8.
Ton fichier si je comprends bien tu peux le convertir en local sur ta machine avant de le télécharger ou de l'exploiter... Donc tu dois pouvoir trouver un logiciel qui permette de lire du Mac Roman et d'enregistrer en UTF-8 Dans ce cas TextEdit est tout à fait utilisable (voir les options d'ouverture et d'enregistrement dans les dialogues correspondants) ou TextWrangler <http://www.barebones.com/> ou SubEthaEdit (tu peux te contenter de la version free 2.2 <http://www.codingmonkeys.de/subethaedit/old.html>
-- Dominique Wojylac http://wojylac.free.fr Un proverbe chinois dit que lorsqu'on a rien à dire on cite généralement un proverbe chinois.
Sebastien <snasna@gmail.com> wrote:
Je dois exploiter un fichier issu d'une Bas de données sous Mac. Je
reçois un fichier type CSV qui est très probablement codé en MAC OS
ROMAN, du moins il n'est pas en Latin-1, Windows-1252, ni UTF-8, car il
produit des caractères non reconnus.
Je passe sur le pourquoi, disons que je dois m'efforcer d'afficher ce
contenu dans des pages web qui seront en UTF-8.
Ton fichier si je comprends bien tu peux le convertir en local sur ta
machine avant de le télécharger ou de l'exploiter...
Donc tu dois pouvoir trouver un logiciel qui permette de lire du Mac
Roman et d'enregistrer en UTF-8
Dans ce cas TextEdit est tout à fait utilisable (voir les options
d'ouverture et d'enregistrement dans les dialogues correspondants) ou
TextWrangler <http://www.barebones.com/> ou SubEthaEdit (tu peux te
contenter de la version free 2.2
<http://www.codingmonkeys.de/subethaedit/old.html>
--
Dominique Wojylac http://wojylac.free.fr
Un proverbe chinois dit que lorsqu'on a rien à dire
on cite généralement un proverbe chinois.
Je dois exploiter un fichier issu d'une Bas de données sous Mac. Je reçois un fichier type CSV qui est très probablement codé en MAC OS ROMAN, du moins il n'est pas en Latin-1, Windows-1252, ni UTF-8, car il produit des caractères non reconnus.
Je passe sur le pourquoi, disons que je dois m'efforcer d'afficher ce contenu dans des pages web qui seront en UTF-8.
Ton fichier si je comprends bien tu peux le convertir en local sur ta machine avant de le télécharger ou de l'exploiter... Donc tu dois pouvoir trouver un logiciel qui permette de lire du Mac Roman et d'enregistrer en UTF-8 Dans ce cas TextEdit est tout à fait utilisable (voir les options d'ouverture et d'enregistrement dans les dialogues correspondants) ou TextWrangler <http://www.barebones.com/> ou SubEthaEdit (tu peux te contenter de la version free 2.2 <http://www.codingmonkeys.de/subethaedit/old.html>
-- Dominique Wojylac http://wojylac.free.fr Un proverbe chinois dit que lorsqu'on a rien à dire on cite généralement un proverbe chinois.
Olivier Miakinen
Je dois exploiter un fichier issu d'une Bas de données sous Mac. Je reçois un fichier type CSV qui est très probablement codé en MAC OS ROMAN, du moins il n'est pas en Latin-1, Windows-1252, ni UTF-8, car il produit des caractères non reconnus.
Je passe sur le pourquoi, disons que je dois m'efforcer d'afficher ce contenu dans des pages web qui seront en UTF-8.
Ton fichier si je comprends bien tu peux le convertir en local sur ta machine avant de le télécharger ou de l'exploiter...
Bon sang mais c'est bien sûr !
Donc tu dois pouvoir trouver un logiciel qui permette de lire du Mac Roman et d'enregistrer en UTF-8
Je dois exploiter un fichier issu d'une Bas de données sous Mac. Je
reçois un fichier type CSV qui est très probablement codé en MAC OS
ROMAN, du moins il n'est pas en Latin-1, Windows-1252, ni UTF-8, car il
produit des caractères non reconnus.
Je passe sur le pourquoi, disons que je dois m'efforcer d'afficher ce
contenu dans des pages web qui seront en UTF-8.
Ton fichier si je comprends bien tu peux le convertir en local sur ta
machine avant de le télécharger ou de l'exploiter...
Bon sang mais c'est bien sûr !
Donc tu dois pouvoir trouver un logiciel qui permette de lire du Mac
Roman et d'enregistrer en UTF-8
Je dois exploiter un fichier issu d'une Bas de données sous Mac. Je reçois un fichier type CSV qui est très probablement codé en MAC OS ROMAN, du moins il n'est pas en Latin-1, Windows-1252, ni UTF-8, car il produit des caractères non reconnus.
Je passe sur le pourquoi, disons que je dois m'efforcer d'afficher ce contenu dans des pages web qui seront en UTF-8.
Ton fichier si je comprends bien tu peux le convertir en local sur ta machine avant de le télécharger ou de l'exploiter...
Bon sang mais c'est bien sûr !
Donc tu dois pouvoir trouver un logiciel qui permette de lire du Mac Roman et d'enregistrer en UTF-8
Ton fichier si je comprends bien tu peux le convertir en local sur ta machine avant de le télécharger ou de l'exploiter...
Si seulement ! Merci beaucoup pour ces suggestsions, mais...
Il s'agit en fait d'un fichier qui sera uploadé par la personne qui exporte ledit fichier depuis l'application sur son Mac. L'upload se fait donc sur le Mac à travers un formulaire web HTML.
L'objectif est que cette personne ait un minimum de manipulations "techniques" à faire. Exporter au bon format et uploader est donc en quelque sorte le max. que je puisse exiger...
Quant à moi, pour simplifier les choses, je travaille sur PC et j'ai un minimum de connaissances du monde Mac.
Revenons au problème PHP. Les suggestions d'Olivier m'ont (une fois de plus !) permis d'avancer.
J'ai écris une fonction qui transforme les caractères MacRoman en entités numériques hexadécimales ISO-10646.
Passons peut-être sur les possibilités d'optimisation de cette fonction.
Cela fonctionne mais je me retrouve avec des entitiés qui limiteront voire empêcheront carrément les possibilités de recherches en mode texte (ai-je oublié de préciser que tout ceci se retrouve dans une base de données ?). Il faudrait donc convertir ces entités numériques en caractères UTF-8. C'est peut-être là que quelque chose m'échappe, car la conversion : "x80"=>"xC4" ne fonctionne pas. J'ai essayé avec "x80"=>"
Ton fichier si je comprends bien tu peux le convertir en local sur ta
machine avant de le télécharger ou de l'exploiter...
Si seulement ! Merci beaucoup pour ces suggestsions, mais...
Il s'agit en fait d'un fichier qui sera uploadé par la personne qui
exporte ledit fichier depuis l'application sur son Mac. L'upload se fait
donc sur le Mac à travers un formulaire web HTML.
L'objectif est que cette personne ait un minimum de manipulations
"techniques" à faire. Exporter au bon format et uploader est donc en
quelque sorte le max. que je puisse exiger...
Quant à moi, pour simplifier les choses, je travaille sur PC et j'ai un
minimum de connaissances du monde Mac.
Revenons au problème PHP. Les suggestions d'Olivier m'ont (une fois de
plus !) permis d'avancer.
J'ai écris une fonction qui transforme les caractères MacRoman en
entités numériques hexadécimales ISO-10646.
Passons peut-être sur les possibilités d'optimisation de cette fonction.
Cela fonctionne mais je me retrouve avec des entitiés qui limiteront
voire empêcheront carrément les possibilités de recherches en mode texte
(ai-je oublié de préciser que tout ceci se retrouve dans une base de
données ?).
Il faudrait donc convertir ces entités numériques en caractères UTF-8.
C'est peut-être là que quelque chose m'échappe, car la conversion :
"x80"=>"xC4" ne fonctionne pas. J'ai essayé avec "x80"=>"