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").
Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.