xmmm.. ellhnika

John Salatas john at csn.gr
Tue Jul 23 14:41:01 EEST 2002


On Monday 22 July 2002 13:32,  P. Christeas wrote:
> Στις Παρ 19 Ιουλ 2002 11:15, ο/η John Salatas έγραψε:
> > > Έχω συγκεντρώσει αρκετά bugs  σε αυτόν τον τομέα. Δοκίμασα iso8859-7
> > > ονόματα,
> > > αλλά και utf-8. Υπάρχει ένα κλασσικό προγραμματιστικό λάθος που κάνουν
> > > σε αρκετά apps, αλλά και ένα μικρό προβληματάκι στην qt 2.x που
> > > δυσκολεύει τα πράγματα. Αν θές, θα σου πώ λεπτομέρειες.
> >
> > Kalo tha itan an mou eleges ti exeis brei. Isws tha mporousame na kanoume
> > kati gia na lythei auto to provlima, an bebaia thes na asxolitheis kai
> > esi ('h kapoios allos).
> > Thanks
>
> Επιφυλάσσομαι για τα συμπεράσματα, γιατί δεν έχω δεί το Qt 3.x ακόμα.
> Στην Qt 2.x υπάρχει η περίφημη τάξη QString. Αυτή δουλεύει με utf-8
> εσωτερικά. Υπάρχει το κλασικό char* (το 8-μπιτο) και η QChar, η οποία
> βασίζεται στο char*. Λίστες είναι η QStringList (που 'κρατάει' QString) και
> η QStrList (που κρατάει QChar's).
> Οι περισσότερες διαδικασίες για αρχεία του συστήματος επιστρέφουν ή
> δέχονται char*, δηλαδή 8-μπιτα.
> Για να μετατρέψουμε ένα char* σε QString υπάρχουν 3 διαδικασίες:
> 1. QString QString::fromLatin1(const char*)
> 2. QString QString::fromLocal8Bit(const char*)
> 3. QString QString::fromUtf8(const char*)
> (σημ. δεν θυμάμαι ακριβώς αυτά τα ονόματα, μπορεί να διαφέρουν λίγο)
> Η νο.1 εκτελείται και στον operator =(const char*). Αυτήν κατά λάθος
> χρησιμοποιούν οι προγραμματιστές. Αυτή νομίζει οτι τα char* είναι σε
> iso8859-1 Εμείς θέλουμε την νο.2. Αυτή διαβάζει το locale και καταλαβαίνει
> το iso8859-7. Το πρόβλημα είναι όταν έχουμε και utf-8 γιατί η νο.2 στο
> Qt.2.x δεν δεχόταν locale με utf-8. Θα έπρεπε να καταλαβαίνει για τα utf-8
> locales οτι το char* είναι τέτοιο και να συμπεριφέρεται σαν την νο.3.
> Αρα:
>  - όπου υπάρχει char* και θέλουμε να το κάνουμε QString, γράφουμε:
> 	strvar= QString::fromLocal8bit(charvar);
>  - όπου υπάρχει QString και θέλουμε να το κάνουμε char*, γράφουμε:
> 	charvar= strvar.local8bit();
>  - δεν χρησιμοποιούμε τον operator = () στις παραπάνω περιπτώσεις, αλλά τις
> παραπάνω διαδικασίες.
>  - αντικαθιστούμε κάθε εμφάνιση του fromLatin1 με fromLocal8bit και του
> toLatin1 με toLocal8bit με αρκετή ασφάλεια.
>  - όπου υπάρχουν ονόματα αρχείων, τα κρατάμε σε QString's, χωρίς μετατροπές
> σε char* όσο γίνεται. Οι διαδικασίες των QFile κλπ δουλεύουν καλά με
> QString's - όπου υπάρχουν λίστες με ονόματα αρχείων, χρησιμοποιούμε
> QStringLists και όχι QStrList.
>  - στα αρχεία ρυθμίσεων αποθηκεύουμε τα QString's και διαβάζουμε αντίστοιχα
> QString's ( και όχι char*). Η Qt θα χρησιμοποιήσει αυτόματα και σωστά το
> utf-8 για τους ελληνικούς χαρακτήρες.
>  - όπου καλείται ξένο πρόγραμμα (με την KProcess), δίνουμε QString στα
> arguments και μεταφράζουμε την stdin/stderr του προγράμματος με το
> fromLocal8bit.
>
> Ελπίζω να ήμουν κατατοπιστικός. Περιμένω σχόλια και διορθώσεις για το Qt
> 3.x Σε όποιο πρόγραμμα δεν δουλεύει σωστά, κοιτάχτε αν εφαρμόζονται οι
> παραπάνω κανόνες.
>
> Σημ: δυσκολεύτηκα αρκετά να στείλω κάποια patches που είχα φτιάξει για το
> Cervisia και το KDevelop. Αυτά έχουν παλιώσει πλέον και δεν είναι Bugs αλλά
> ζήτημα σωστού προγραμματισμού.

Arketa endiaferon.
Potes mou den katalaba pws akribws douleoun ta parapanw. Otan brw eukairia 
(pisteuw to SK) tha to tsekarw se QT 3.0.3 (den exw anabathistei stin 3.0.5 
akoma).



More information about the Linux-greek-users mailing list