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

 

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

codepage problem -μαλλον

Îåêßíçóå áðü ôï ìÝëïò zar0g. Τελευταία δημοσίευση από το μέλος zar0g στις 14-03-2008, 16:31. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  13-03-2008, 16:37 40835

    codepage problem -μαλλον

    Hi forum αντιμετωπιζω το εξης προβλημα με την C#

    εκτελω την εντολη

    Char _ch = (Char)200;

    αυτο συμφωνα με το codepage windows-1253 ειναι το γραμμα 'Θ' αλλα εμενα μου επιστρεφει αυτο 'È'

    προφανως λεω καποια μετατροπη θελει στο codepage ετσι λοιπον εγραψα το παρακατω κωδικα

    Encoding enc = Encoding.GetEncoding(1253) ;

    Char _ch = (Char)200;

    Byte[] b = enc.GetBytes(_ch.ToString());

    String res = enc.GetString(b);

    και αυτο που μου επιστρεφει στο string ειναι το 'E' αγγλικο που ειναι στη θεση 69 στο ascii table

    Τι κανω λαθος ?

    καμια λυση?

    thanks

  •  14-03-2008, 14:34 40852 σε απάντηση της 40835

    Απ: codepage problem -μαλλον

    zar0g:

    Hi forum αντιμετωπιζω το εξης προβλημα με την C#

    εκτελω την εντολη

    Char _ch = (Char)200;

    αυτο συμφωνα με το codepage windows-1253 ειναι το γραμμα 'Θ' αλλα εμενα μου επιστρεφει αυτο 'È' 

    προφανως λεω καποια μετατροπη θελει στο codepage

    Σωστή διαπίστωση. Όντως αυτή είναι η αντιστοιχία στο 1253, αλλά κάνοντας direct cast από byte σε char, δεν χρησιμοποιείς αυτό το encoding.

    zar0g:
     

    ετσι λοιπον εγραψα το παρακατω κωδικα

    1: Encoding enc = Encoding.GetEncoding(1253) ;

    2: Char _ch = (Char)200;

    3: Byte[] b = enc.GetBytes(_ch.ToString());

    4: String res = enc.GetString(b);

    και αυτο που μου επιστρεφει στο string ειναι το 'E' αγγλικο που ειναι στη θεση 69 στο ascii table

    Τι κανω λαθος ?

    καμια λυση?

    thanks

    Κάνεις πολλές μετατροπές. Από byte σε char (γραμμή 2), από char σε string και από string σε byte (γραμμή 3) και μετά από byte σε string! Μπερδεύτηκα!

    Η λύση είναι η εξής:

    byte[] dataInBytes = new byte[] {200};
    char[] dataInChars = enc.GetChars(dataInBytes);
    string dataInString = enc.GetString(dataInBytes);
     

    Ο λόγος που χρησιμοποιούμε arrays είναι γιατί δεν ξέρουμε αν ένα char αντιστοιχεί σε ένα byte. Στο unicode π.χ. ένα char είναι 2 bytes. Στο windows-1253 είναι 1 προς 1. Αν είσαι σίγουρος ότι αυτό είναι το encoding σου, τότε μπορείς με ασφάλεια να πάρεις το dataInChars[0].

    Επίσης δεν είναι σίγουρος αν το Encoding.GetEncoding(1253) επιστρέφει το σωστό αποτέλεσμα. Δοκίμασε και το Encoding.GetEncoding("windows-1253").


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  14-03-2008, 15:44 40855 σε απάντηση της 40852

    Απ: codepage problem -μαλλον

    Ευχαριστω για την απαντηση

    το βρηκα εχτες τελικα

    ανιτκατεστισα την γραμμη 3 με αυτο

    Byte[] b = BitConverter.GetBytes(ch);

    και επαιξε

     

  •  14-03-2008, 15:59 40857 σε απάντηση της 40855

    Απ: codepage problem -μαλλον

    Αν καταλαβαίνω καλά, θέλεις να πάρεις το string που αντιστοιχεί στην τιμή 200 της κωδικοσελίδας windows-1253. Αν είναι έτσι, τότε και πάλι κάνεις πολλές μετατροπές. Το σωστό είναι αυτό:

    Encoding windows1253encoding =  System.Text.Encoding.GetEncoding("windows-1253");
    byte[] dataInBytes = new byte[] {200};
    string dataInString = windows1253encoding .GetString(dataInBytes);

    ή σε μια γραμμή:

    string dataInString = System.Text.Encoding.GetEncoding("windows-1253").GetString(new byte[] {200});


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  14-03-2008, 16:31 40858 σε απάντηση της 40857

    Απ: codepage problem -μαλλον

    ο κωδικας ειναι σε ενα ειδος απλης κρυπτογραφισης που για καθε χαρακτηρα μου δινουν τον ascii code του

    ετσι παιρνω το 200 ας πουμε και το μετατρεπω σε χαρακτηρα

    αυτο που εκανα λαθος ειναι οτι μετετρεπα το χαρακτηρα σε Byte[] μεσω του getbytes του encoding αντι για το bitconverter

     

    ευχαριστω για το ενδιαφερον

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