poscaman Δημοσ. 4 Ιουλίου 2007 Δημοσ. 4 Ιουλίου 2007 Δες εδώ http://www.insomnia.gr/vb3/showpost.php?p=1014029&postcount=6 ελπίζω να σε βοηθήσει, καλή συνέχεια! αυτο το ειδα,αλλα να πω οτι δεν καταλαβα τιποτα?
Directx Δημοσ. 4 Ιουλίου 2007 Δημοσ. 4 Ιουλίου 2007 Απλά έχε το console σε μορφή παραθύρου (όχι full screen) και γύρισε το φόντο του σε Lucida Console (δες τα properties του console), ύστερα δώσε την εντολή chcp 1253 και θα πρέπει να είσαι ok. Τα παιδιά σε εκείνο το παλιό θέμα (http://www.insomnia.gr/vb3/showthread.php?p=1014029#post1014029) με αυτή την συνταγή βρήκαν λύση στο ίδιο πρόβλημα - γιατί όχι και εσύ ...
poscaman Δημοσ. 4 Ιουλίου 2007 Δημοσ. 4 Ιουλίου 2007 μικρη λεπτομερεια....χρησιμοποιω full-screen.... (ειδα το θεμα,θα προσπαθησω αργοτερα να δω τι γινεται με fullscreen) οταν λες γυρισε το φοντο του σε Lucida Console,εννοεις?
Directx Δημοσ. 4 Ιουλίου 2007 Δημοσ. 4 Ιουλίου 2007 Απλά να αλλάξεις τον φόντο του Console σου σε αυτό από τις ιδιότητες του Console Window ...
alkisg Δημοσ. 4 Ιουλίου 2007 Δημοσ. 4 Ιουλίου 2007 Η συνταγή με το chcp δουλεύει, το κακό είναι ότι θα δουλεύει μόνο στον δικό σου Η/Υ και αφού κάνεις τις απαραίτητες ρυθμίσεις! Εφόσον γράφεις πρόγραμμα για κονσόλα, το σωστό είναι να γράφεις σε κωδικοσελίδα OEM (cp737). Το Visual Studio δεν είναι δύσκολο. Απλά εγκατέστησε την Express Edition που είναι τζάμπα και κάνε new console project. Ή βάλε το Code::Blocks, και τα δύο υποστηρίζουν OEM charset. Αν κάποια στιγμή βρω χρόνο θα κοιτάξω και το manual του gcc (τον οποίον χρησιμοποιούν και το devcpp και το codeblocks) για να δω αν υποστηρίζει charset transcoding, δηλαδή να γράφεις 1253 και να παράγει 737, οπότε να λυθεί σωστά το πρόβλημα είτε δουλεύεις με devcpp είτε με codeblocks...
Directx Δημοσ. 4 Ιουλίου 2007 Δημοσ. 4 Ιουλίου 2007 Υπάρχει και ένας ακόμα τρόπος που μόλις βρήκα, λοιπόν μπορούμε να ζητήσουμε από τα MS-Windows να μετατρέψουν αυτόματα τους χαρακτήρες ενός string μας στην κωδικο-σελίδα του MS-DOS (OEM) που στην περίπτωση μας είναι η Ελληνική -γλιτώνουμε το Conversion (αρκεί βέβαια ο Compiler να έχει headers & libraries που υποστηρίζουν το WinAPI). Αυτό το πετυχαίνουμε εύκολα με την ρουτίνα CharToOem και CharToOemBuff τις οποίες μπορούμε να καλέσουμε με κοινή παράμετρο αρκεί τα δυο String που μετατρέπουμε να είναι ANSI (όχι MBCS δηλαδή κτλ.) Ακολουθεί παράδειγμα γραμμένο σε CodeGear C/C++ Builder 6 δοκιμασμένο σε MS-Windows XP Home. Το μετατρεπόμενο κείμενο φυσικά παρουσιάζεται σωστά σε κάθε περίπτωση, είτε δηλαδή σε Console Window είτε σε Full-Screen Console. > //-CharToOem----------------------------------------------------------------- #include <stdio.h> #include <windows.h> #ifdef __BORLANDC__ #pragma hdrstop #endif //--------------------------------------------------------------------------- #ifdef __BORLANDC__ #pragma argsused #endif int main(int argc, char* argv[]) { char *pszTest = "Ελλάς!!", *pszEnd = "Πατήστε Enter για τέλος.."; printf(" Windows Greek under Console: \"%s\"\n",pszTest); if(CharToOem(pszTest,pszTest)) printf(" Windows Greek under Console after CharToOem: \"%s\"\n",pszTest); else printf(" CharToOem failure!\n"); if(CharToOem(pszEnd,pszEnd)) printf("%s\n",pszEnd); else printf(" Press Enter to quit..."); getchar(); return 0; } //--------------------------------------------------------------------------- Υ.Γ. Φυσικά τα MS-Windows παρέχουν και αντίστροφες ρουτίνες όπως την OemToChar και OemToCharBuff κτλ.. Ελπίζω αυτό να βοηθήσει
alkisg Δημοσ. 4 Ιουλίου 2007 Δημοσ. 4 Ιουλίου 2007 Το WinAPI έχει και τις παρακάτω: SetConsoleOutputCP (http://msdn2.microsoft.com/en-us/library/ms686036.aspx): Την καλείς μια φορά (σε αντιστοιχία με την chcp 1253) και ξεμπέρδεψες, δεν χρειάζεται να την καλείς για κάθε string. Γράφει για .net framework 3, αλλά ισχύει γενικά για Windows >= NT, δεν χρειάζεται framework. SetConsoleCP: το ίδιο αλλά για input. WideCharToMultiByte και MultiByteToWideChar: για μετατροπές από/σε OEM/ANSI/Unicode/UTF8/κτλ SetFileApisToANSI: για να μπορείτε να ανοίγετε αρχεία με ελληνικά ονόματα ή ελληνικό περιεχόμενο όταν χρησιμοποιείτε Windows 1253. Κτλ κτλ. Συμπέρασμα: αν γράφετε κώδικα που τρέχει σε κονσόλα, χρησιμοποιήστε εξ' αρχής cp737!!! Βρείτε ένα IDE που να προσφέρει αυτήν την δυνατότητα!!!
Directx Δημοσ. 4 Ιουλίου 2007 Δημοσ. 4 Ιουλίου 2007 Δυστυχώς το SetConsoleOutputCP δεν τα καταφέρνει στο δικό μου μηχάνημα εκτός και αν κάνουμε το trick με τα fonts (1253) διαφορετικά τζίφος (ούτε full screen επίσης ) ... οπότε CharToOem. > //--------------------------------------------------------------------------- #include <stdio.h> #include <windows.h> #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { int nCodePage[] = { 1253, 737, 437 }, nCodePageIdx; for(nCodePageIdx=0;nCodePageIdx<3;nCodePageIdx++) { printf(" %.4d = ",nCodePage[nCodePageIdx]); if(!SetConsoleOutputCP(nCodePage[nCodePageIdx])) printf(" Invalid code-page!\n"); else printf(" Ελλάς!\n"); printf(" Press Enter to Move on..."); getchar(); } printf("\n Press Enter to Quit..."); getchar(); return 0; } //---------------------------------------------------------------------------
alkisg Δημοσ. 4 Ιουλίου 2007 Δημοσ. 4 Ιουλίου 2007 > Δυστυχώς το SetConsoleOutputCP δεν τα καταφέρνει στο δικό μου μηχάνημα εκτός και αν κάνουμε το trick με τα fonts (1253) διαφορετικά τζίφος (ούτε full screen επίσης) Ναι, αυτό είναι γνωστό πρόβλημα, έχει αναφερθεί στην msdn. > οπότε CharToOem. Όμως έτσι θα πρέπει να αλλαχθεί όλος ο κώδικας εκεί που υπάρχουν strings, είναι ασύμφορο. Και θέλει και την SetFileApisToANSI για τα αρχεία, γιατί αλλιώς δεν δουλεύουν σωστά όσα έχουν ελληνικό όνομα ή περιεχόμενα. Υπερβολικό overhead απλά για να διορθωθεί ένα πρόβλημα με codepages. Στο visual studio (και σε άλλους IDE) του λες ότι θες να δουλεύεις με κωδικοσελίδα 437 και ξεμπερδεύεις με όλα χωρίς καμία απολύτως αλλαγή στον κώδικα και χωρίς χρήση WinAPI (οπότε αν θες μετά το κάνεις κατευθείαν compile και σε unix)... Ο gcc έχει μια επιλογή -fexec-charset αλλά δεν την δοκίμασα ποτέ. Στην χειρότερη περίπτωση μπορεί να βάλει στο preprocessing stage του devcpp να εκτελεί ένα utility αλλαγής κωδικοσελίδας, υπάρχουν μπόλικα τέτοια. Αλλά δεν βλέπω το λόγο γιατί να μην αλλάξει απλά IDE.
Directx Δημοσ. 4 Ιουλίου 2007 Δημοσ. 4 Ιουλίου 2007 Δεν λέω και εγώ μαζί σου, ας πάει σε άλλο IDE, απλά ορισμένες φορές είναι δύσκολο να αφήσεις κάτι που ξέρεις αρκετά καλά, ύστερα ορισμένοι compilers δεν υποστηρίζουν #pragma setlocale (πχ. C/C++ Builder 6 ) το δέον για εμένα λοιπόν θα ήταν να δούλευε σωστά η SetConsoleCP γενικότερα αλλά δυστυχώς αυτό δεν είναι εφικτό προς το παρόν. Υ.Γ. Αν θυμάμαι καλά στο Visual Studio το pragma για το codepage είναι κάτι σε #pragma setlocale ( ; )
alkisg Δημοσ. 4 Ιουλίου 2007 Δημοσ. 4 Ιουλίου 2007 Αν θυμάμαι καλά δε χρειάζεται pragma, έχει σχετική επιλογή στα solution options. Επίσης έχει και open with encoding οπότε δεν χρειάζεται καν τα options...
poscaman Δημοσ. 5 Ιουλίου 2007 Δημοσ. 5 Ιουλίου 2007 ε,λοιπον χωρις πλακα...παω τρεχοντας ξανα στο vim μου....
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.