[CSProjects] Despre diacritice

Lucian Cojocar cojocar at gmail.com
Wed Aug 29 13:02:28 EEST 2007


On 12/08/2007, Vlad Dogaru <ddvlad at anaconda.cs.pub.ro> wrote:
> Salut,
>
> dacă nu cumva o să fie şters între timp, vă aduc atenţiei fişierul
> http://cspay.anaconda.cs.pub.ro/iw/download.php?f=libspreadconv0GJBqJ.ods.
> Am folosit pentru nume diacritice şi au apărut întocmai în fişierul
> final, ceea ce probabil este rezultatul câtorva lucruri:
>
> 1. PHP are suport Unicode. Şi fie au lucrat băieţii noştri cu grijă faţă
> de diacritice, fie e foarte transparent acest suport. Either way,
> recunosc (prima şi ultima oară :P) că am subestimat PHP-ul.
>
> 2. anaconda este Unicode-aware. Kudos to Razvan and Debian.
>
> 3. Bibliotecile în C lucrează la nivel de octet. Asta e normal, dar nu
> îmi venise în minte că o să aibă efectul de a păstra caracterele
> intacte, atâta timp cât encoding-ul e pus corect.

Salutare,
chestia asta este periculoasa, pentru ca personal.ini care rezulta din
scriptul php este codat UTF-8. Apoi libiniparser il citeste ca fiind
ASCII, deci strlen nu mai functioneaza cum trebuie + alte hazarduri de
aici.

O solutie pe care o propun este:

* Generarea lui personal.ini de catre scriptul php ca fisier ASCII
folosind interpretarea (sau cum ii spune) ISO_8859-16. Adica in loc de
ş sa fie trecut un singur byte si anume 'BA' (hex), in loc de ţ sa fie
trecut 'FE' (hex) etc. [1].

* Rularea programelor care fac fisierele xml din fisierul ods.

* Convertirea fisierului content.xml din ASCII in UTF-8, de exemplu cu
programul recode [2].
$recode ISO_8859-16..UTF-8 content.xml
Am senzatia ca programul dispune si de o biblioteca pe care o putem
folosi, fara sa mai apelam un executabil, ramane de vazut.

* Arhivarea in fisierul de iesire ods.

Am vazut ca unii mai folosesc, pentru limba romana si ISO_8859-2
(chiar si eu), dar am citit ca nu este chiar pentru limba romana
(sedila vs. virgula) [3]. Pe de alta parte nu stiu cati au fonturi
pentru a reda ISO_8859-16 (de exemplu Arial nu are, dar are pentru
-2). Un font care reda ISO_8859-16 este DejaVu [4].

[1] http://en.wikipedia.org/wiki/ISO/IEC_8859-16
[2] http://www.gnu.org/software/recode/
[3] http://en.wikipedia.org/wiki/ISO_8859-2
[4] http://sourceforge.net/projects/dejavu/


More information about the cspay-dev mailing list