Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Σχιζοφρένεια με τα codepages

Îåêßíçóå áðü ôï ìÝëïò m6s. Τελευταία δημοσίευση από το μέλος m6s στις 16-02-2011, 10:35. Υπάρχουν 9 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  15-02-2011, 15:39 63277

    Σχιζοφρένεια με τα codepages

    Χαβαλεδιάρικη ερώτηση...αλλά όχι παράλογη... και δεν ξέρω αν έχει ξαναγίνει...

    ανοίγεις...cmd.exe (command.exe ( command.com! ) ) ...ansi
    ..............editor...ansi
    ..............χ-άλλο editor...utf8 ?
    ..............thunderbird...iso8859-7..?
    ..............windows explorer utf8!? δεν βάζω το χέρι μου στην φωτιά...

    σχιζοφρένεια! Μπορεί να δουλέψει ένα σύστημα windows με μια κωδικοποίηση, και μόνο; utf-8. τελεία. είτε ανοίγεις τερματικό είτε "νοτπαδ" ; nothing else!
    το έχει ψάξει κανείς;


  •  15-02-2011, 17:32 63279 σε απάντηση της 63277

    Απ: Σχιζοφρένεια με τα codepages

    Υπονοείς ότι η utf-8 είναι κατάλληλη για όλες τις δουλειές;Stick out tongue
    Η τέλεια κωδικοποίηση χαρακτήρων είναι ότι ο τέλειος άντρας για τις γυναίκες:καθορίζεται από αντιφατικά κριτήρια που συχνά αναιρούν το ένα το άλλο.Και φυσικά στο τέλος καταλήγουν οι αντίστοιχες ενδιαφερόμενες ομάδες με αυτό που είναι βολικό ανά περίσταση.Stick out tongue
  •  15-02-2011, 17:56 63281 σε απάντηση της 63279

    Απ: Σχιζοφρένεια με τα codepages

    Πολλά "Like" στην απάντηση!, αλλά είναι pain in the...ονιονς. Κανά τερματικό σε utf-8 να κάνει replace τελείως όμως το cmd.exe δεν παίζει; Δηλαδή ever δεν υπήρξε τέτοια ανάγκη; φαντάσου αυτό query mysql από python σε τερματικό ansi...όλα τα λεφτά... ;-) :-)
  •  15-02-2011, 18:01 63282 σε απάντηση της 63279

    Απ: Σχιζοφρένεια με τα codepages

    Η πραγματική σχιζοφρένεια είναι ότι αυτό που ζητάει ο m6s ΕΙΝΑΙ αυτό που ήδη συμβαίνει. Default είναι το Unicode και μάλιστα το UCS-2 (2-byte Unicode), εκτός και αν η εφαρμογή δεν υποστηρίζει Unicode, δηλ. έχει γίνει native compile με τα ANSI libraries και όχι με Unicode. Το codepage που χρησιμοποιούν οι non-Unicode εφαρμογές είναι απολύτως καθορισμένο, και είναι αυτό που ορίζεις στο system locale.

    Μετά όμως, να μην μπορεί η κάθε εφαρμογή να χρησιμοποιεί το codepage που ζητάει ο χρήστης? Ε? Να μην το χρησιμοποιήσει? Ή αν ο προγραμματιστής λέει "εγώ θέλω ELOT-928" τί θα του πεις, ότι θα παίξει μόνο με το codepage στο locale? Κι έτσι καταλήγεις παρά τα default, διαφορετικές εφαρμογές καταλήγουν να χρησιμοποιούν διαφορετικά codepages.

    Από την άλλη και ο darklynx έχει δίκιο, ειδικά για το Unicode. Για τις δυτικές χώρες το UTF8 είναι πιο λογικό από το UCS2 ενώ για εμάς το αντίθετο. Το notepade κάνει τα αδύνατα-δυνατά για να ανακαλύψει το encoding ενός text αρχείου, αλλά στο τέλος η κάθε εφαρμογή θα αποθηκεύσει εκεί που θέλει αυτή ή ζητάει ο χρήστης. Ακόμα και για το txt


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  15-02-2011, 18:06 63283 σε απάντηση της 63282

    Απ: Σχιζοφρένεια με τα codepages

    Παναγιώτη UCS-2 είναι το UTF-16 ;

  •  15-02-2011, 18:12 63284 σε απάντηση της 63281

    Απ: Σχιζοφρένεια με τα codepages

    m6s:
    Πολλά "Like" στην απάντηση!, αλλά είναι pain in the...ονιονς. Κανά τερματικό σε utf-8 να κάνει replace τελείως όμως το cmd.exe δεν παίζει; Δηλαδή ever δεν υπήρξε τέτοια ανάγκη; φαντάσου αυτό query mysql από python σε τερματικό ansi...όλα τα λεφτά... ;-) :-)

    Ώπα, εδώ δεν φταίνε τα Windows αλλά η MySQL η οποία χειρίζεται περίεργα τα unicode και τα θεωρεί απλά άλλο ένα codepage και μάλιστα καταλαβαίνει μόνο από UTF8 (τα περί δυτικών χωρών που λέγαμε. Τί να βάζουμε unicode support, ρίξε ένα utf8 να τελειώνουμε). Αν δεν βάλεις το σωστό codepage στο connection string της τα αποτελέσματα θα είναι κομμάτι περίεργα. Αν τώρα η python που χρησιμοποιείς νομίζει ότι παίρνει ansi strings αντί για unicode, πάλι θα έχεις πρόβλημα - και εδώ που τα λέμε, το default encoding της Python είνα ASCII ...

    Μην κατηγορείς το λειτουργικό επειδή βάση και γλώσσα δεν παίζουν καλά με Unicode - ή μάλλον, θεωρούν ότι το Unicode είναι edge case. Κάτι μου λέει ότι η IronPython δεν θα είχε προβλήματα μετατροπών (εφόσον έχεις δώσει το UTF8 codepage στο MySQL connection string Stick out tongue )


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  15-02-2011, 18:16 63285 σε απάντηση της 63283

    Απ: Σχιζοφρένεια με τα codepages

    m6s:
    Παναγιώτη UCS-2 είναι το UTF-16 ;

    Όχι ακριβώς, και εδώ είναι η τρέλα. Το UTF-16 είναι ... variable length και μπορεί να πιάσει 16 ή 32 bits. Το UCS2 είναι πάντα 16 bit κι έτσι δεν καλύπτει κάποιους χαρακτήρες πάνω από το 63488 (μάλλον είναι τα αρχαία πρωτοκινέζικα). Δες και το σχετικό στο Wikipedia.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  16-02-2011, 01:37 63295 σε απάντηση της 63285

    Απ: Σχιζοφρένεια με τα codepages

    Οκ, Παναγιώτη, με έχεις παρεξηγήσει, δεν μιλάω ενάντια στο λειτουργικό. Μου αρέσει η ανάλυση, αλλά όλο το concept μου φαίνεται λιγάκι χαλαρό. Γιατί, πρώτον το utf8 είναι το codepage της ελληνικής, η mysql υποστηρίζει utf8 ( εκτός και αν εγώ δεν έχω καταλάβει την mysql, άνθρωποι είμαστε...), και σε λειτουργικά άλλα, δουλεύει τέλεια, γνωρίζοντας, ότι το τερματικό είναι utf8. Και πολύ περισσότερο όλο το GUI ακόμα καλύτερα.

    Γενικά αναφέρομαι στο τερματικό που είναι έξοδος ansi και μάλιστα το 737. Τώρα μάλιστα που το ξανακοιτάω, ανακάλυψα και την ύπαρξη της chcp!

    βρήκα και αυτό το αξίολογο -νομίζω- http://stackoverflow.com/questions/1259084/what-encoding-code-page-is-cmd-exe-using
    στο οποίο περιγράφει λεπτομέρειες που ειλικρινά δεν φανταζόμουνα. Όπως το τι σημαίνει raster fonts και γιατί επηρεάσαν πιθανά την Mysql.

    Καθώς και την cmd /u που θα την δοκιμάσω τις επόμενες μέρες ;-)

    Πάντως διαφοτιστική η συζήτηση.  :-)
  •  16-02-2011, 08:56 63300 σε απάντηση της 63295

    Απ: Σχιζοφρένεια με τα codepages

    Δεν προσπαθώ να υπερασπιστώ το λειτουργικό, απλά σου λέω ότι το πρόβλημα σου δεν έχει να κάνει με το λειτουργικό. Τα Windows είναι Unicode by default, internally και πρέπει να δουλέψεις για να γυρίσεις σε ASCII. Επίσης, οι γλώσσες του .NET και η Java είναι και αυτές Unicode by default. Λειτουργικό και γλώσσες δουλεύουν με unicode χωρίς να κάνεις τίποτε ιδιαίτερο, απλά γράφοντας ένα string. H MySQL και η Python δεν είναι unicode by default και γι αυτό πρέπει να ορίζεις encodings και να αναρωτιέσαι πότε έγινε το σωστό και πότε όχι.

    To UTF8 ΔΕΝ είναι το codepage της ελληνικής. Το Unicode δεν έχει συγκεκριμένα codepages ανά γλώσσα, εξάλλου φτιάχτηκε για να απαλλαγούμε από τα codepages. Άσε που δεν έχει και όφελος για τα ελληνικά καθώς τα ελληνικά strings χρειάζονται δύο bytes ανά χαρακτήρα, όπως και το UTF16/UCS2.

    Επίσης, στις περισσότερες βάσεις (Oracle, SQL Server, DB2) αλλά και στο SQL Standard υπάρχει διαχωρισμός μεταξύ απλού CHAR και National CHAR το οποίο κατά κανόνα είναι Unicode (στην Informix παίζει αλλιώς). Η MySQL δεν έχει national char τύπους και γι αυτό χρησιμοποιεί το UTF8 λες και είναι άλλο ένα ANSI encoding. Αν δεν φροντίσεις να χειριστείς τα string που σου επιστρέφει σωστά μπορείς άνετα να αποθηκεύσεις λάθος encoding εκεί μέσα και δεν θα το καταλάβεις μέχρι να το δει ο χρήστης. 

    Μια και λες ότι δουλεύει σε άλλα λειτουργικά ... είσαι τυχερός που κανείς δεν έριξε λάθος strings. Έχουν γίνει αρκετές ερωτήσεις εδώ στο παρελθόν για κείμενα τα οποία ήταν ελληνικά στο ξεκίνημα και κατέληξαν κινέζικα στο τέλος. Αν ξεχάσεις να κάνεις π.χ. escape τα string που διαβάζεις στην python τα ελληνικά θα φτάσουν πίσω ως ANSI και όχι UTF8. Μην ξεχνάς, το default της python είναι το ANSI και όχι το UTF8. Σου φάνηκε ότι δεν υπάρχει πρόβλημα γιατί έτυχε το τερματικό ή η σελίδα εισαγωγής των δεδομένων να είναι UTF8 οπότε τα δεδομένα έφτασαν χωρίς πρόβλημα στη βάση. Αν δεν ίσχυε αυτό, θα έβλεπες κινέζικα.

    Η διαφορά είναι ότι ενώ στα Windows, τις περισσότερες βάσεις και τη Java υπάρχει ειδικός χειρισμός για unicode και αυτόματες μετατροπές ή ειδοποιήσεις όταν υπάρχει conversion από/σε ASCII, στο συνδυασμό Python/MySQL βασίζεσαι μόνο στα default encodings και στο ότι writer και reader θα έχουν το ίδιο encoding. Με άλλα λόγια, είναι λες και γράφεις ακόμα σε DOS ...

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  16-02-2011, 10:35 63310 σε απάντηση της 63300

    Απ: Σχιζοφρένεια με τα codepages

    Ναι σε αυτό έχεις πολύ δίκιο, και ειδικά για περίπτωση python, πάντα κοιτάω να έχω το script έτοιμο για utf8 και γενικά θέλω το περιβάλλον να το έχω έτσι, απλά δεν είχα βρεί η αλήθεια είναι κάποιες λεπτομέρειες που σας είπα πριν για το τερματικό, και που μάλλον θα βοηθούσαν. Όσο για τα ελληνικά που γίνονται κινέζικα, τρομακτικό το σενάριο ;-) πάντα τεστάρω τα αποτελέσματα.

    Και πράγματι η MySQL χάνει πολύ, που δεν ξεχωρίζει nchar/char (plus "set Names utf8"), για εμένα γιατί τελικά αφού όλοι το χρησιμοποιούν να ψάχνεις να σετάρεις ελληνικά της προκοπής σε σύστημα linux/windows είναι πολύ πονοκέφαλος που δεν υπήρχε λόγος.

    Αλλά τώρα με μπέρδεψες σε κάτι, επειδή μιλάς για "unicode", με unicode(όποιαδήποτε τροποποίηση) αλλά και πιο συγκεκριμένα και με το utf16 εγώ δεν έχω καταφέρει να δώ ελληνικά. Πάντα, utf8. Εσύ έχεις δεί με utf16 ή κάτι άλλο;

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems