Προς το περιεχόμενο

Περί C programming


Padaz Bloody

Προτεινόμενες αναρτήσεις

Θεωρητικά το Code::Blocks χρησιμοποιεί το default encoding της πλατφόρμας.

 

Για να μην σε μπλέξω πολύ κάνε την εξής δοκιμή. Γράψε και σώσε με το Code::Blocks ένα .c αρχεία με ελληνικό μήνυμα σε κάποια printf. Μετά άνοιξε αυτό το .c αρχείο με το notepad++ και πες μου τι encoding σου δείχνει στην τέρμα δεξιά μεριά της status-bar.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 100
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Αναφέρει το εξής : Κωδικοποίηση σε UTF-8 χωρίς BOM.

 

To notepad++ δεν το είχα, δε μου χρειάστηκε ποτέ, βασικά δεν ήξερα οτι υπήρχε , και τι μπορείς να κάνεις. Eίναι σαν το απλό notepad των windows μόνο που έχει περισσότερα features?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αναφέρει το εξής : Κωδικοποίηση σε UTF-8 χωρίς BOM.

 

To notepad++ δεν το είχα, δε μου χρειάστηκε ποτέ, βασικά δεν ήξερα οτι υπήρχε , και τι μπορείς να κάνεις. Eίναι σαν το απλό notepad των windows μόνο που έχει περισσότερα features?

 

Οκ. Λογικά, αν με ανοιχτό το .c μέσα στο Code::Blocks πας: Edit->File Encoding και το βάλεις εκεί σε "System default" (εκεί μάλλον σου είναι τώρα σε "UTF 8") και σώσεις το .c, λογικά δεν θα έχεις πρόβλημα πια (απλώς βάλε -fexec-charset=cp737 στον compiler, εφόσον λες πως σε αυτή την κωδικοσελίδα είναι από μαμά η γραμμή εντολών σου... άλλα ίσως πια να μη χρειάζεται ούτε αυτό).

 

Για δοκίμασε και πες μου.

 

ΥΓ. Το Notepad++ είναι programmers editor... δες κι εδώ.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έκανα αυτά που λες. Μόνο που , στο File encoding έλεγε System Default. Μετά, μέσα σε μια printf έβαλα ελληνικά αλλά μόλις πάτησα να κάνει compile μου εμφάνισε ένα μήνυμα σε κίτρινο πλαίσιο που έλεγε : tip: The file encoding has been changed to UTF-8 to prevent data loss.

 

Δηλαδή στην αρχή , μόλις το άνοιξα, ήταν στο System Default και μετά άλλαξε σε UTF-8.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Περίεργο, τι έκδοση Code::Blocks και Windows χρησιμοποιείς;

 

Οπότε τώρα υπάρχουν διάφορες λύσεις: μια περιγράφεται εδώ (αλλά η προσωπική μου εμπειρία με το 65001 στην κονσόλα των Windows ήταν πολύ προβληματική).

 

Πριν καταφύγεις στην παραπάνω λύση, δοκίμασες έτσι όπως είσαι τώρα να βάλεις μονάχα -fexec-charset=cp737 στον compiler (χωρίς δηλαδή -fexec-input flag) και δεν σου δούλεψε;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Χρησιμοποιώ την 13.12 σε win 7 x64.

Ναι το δοκίμασα και δεν μου τρέχει, πάλι "κινέζικα".

 

Στο link που μου έδωσες, το πέμπτο βήμα που λέει... "5) Select an utf8 capable font in all cmd windows. (not the standard font) (eg. use Lucida Console)" ... τι εννοεί?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Εννοεί πως μόλις ανοίξει το παράθυρο της κονσόλας, κάνε κλικ στην πάνω αριστερή γωνία του και από το μενού που ανοίγει διάλεξε: Properties. Κατόπιν στην καρτέλα Font βάλε είτε Consolas, είτε Lucida Console (το default είναι Raster font, που είναι πολύ περιορισμένο ως προς τις κωδικοσελίδες που υποστηρίζει).

 

Πάντως η άποψή μου είναι να αποφύγεις την κωδικοσελίδα 65001. Δοκίμασε αυτά που σου λέει εκεί, αλλά αντί για 65001 βάλε ως κωδικοσελίδα εκτελέσιμου την 1253.

 

Δηλαδή:

 

1. Στο Code::Blocks βάλε ως στάνταρ κωδικοποίηση πηγαίων αρχείων την UTF-8 (αντί για System Default).

 

2. Στο πρόγραμμά σου βάζε πάντα: #include <stdlib.h>

και ως 1η γραμμή κώδικα στην main() βάζε: system( "chcp 1253" );

 

3a. Στον compiler βάζε -fexec-charset=cp1253 (βασικά αυτό πρέπει να συμπίπτει με την ενεργή κωδικοσελίδα της κονσόλας των Windows.)

 

3b. Στον compiler μη βάζεις καθόλου το -finput-charset (όταν το παραλείπεις, το θεωρεί UTF-8... παρόλα αυτά μπορείς αν το θες να το βάλεις κι αυτό: -finput-charset=utf-8... βασικά αυτό πρέπει να συμπίπτει με το Edit -> File Encoding του Code::Blocks).

 

4. Στο παράθυρο της κονσόλας των Windows που ανοίγει για να τρέξει το πρόγραμμά σου, την 1η φορά άλλαξε τη γραμματοσειρά είτε σε Consolas είτε σε Lucida Console (τις υπόλοιπες φορές θα το θυμάται, αν θυμάμαι καλά).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ούτε πάλι εμφανίζει τα ελληνικά. Το καλό είναι πως εμφανίζει λιγότερο περίεργα σύμβολα:P

 

Πάντως, ξανά έτρεξα σε cmd την εντολή chcp και μου εμφανίζει 437  :-(

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Εννοείς με 1253 ως executable codepage ή με 65001;

 

ΥΓ. Εγώ έχω αλλάξει την default console codpage των Windows σε 1253 (και σε XP x86 και σε Win 7 x64 σε διάφορα μηχανάκια μου) κάνοντας edit το registry κι έχω "ησυχάσει" από όλη αυτή τη βαβούρα... μόνο που έχει ρίσκο να πειράζεις το registry. Οπότε αν το κάνεις, το κάνεις at your own risk.

 

ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Όταν επιχείρησα να βάλω στο registry την 65001 στα XP, το PC δεν ξαναμπουτάρισε ποτέ (στα Win 7 δεν το δοκίμασα καν, έβαλα απευθείας 1253). Το επανέφερα με BartPE τελικά... να συμπληρώσω επίσης πως έτσι κι αλλιώς το 65001 είναι ανάπηρο UTF-8.

 

Παραθέτω και σχετικό screenshot από το registry των XP σε περίπτωση που θελήσει να το κάνει κανείς (έχω αλλάξει και το ACP εγώ):

 

post-38307-0-66361800-1421542688_thumb.png

 

...

Πάντως, ξανά έτρεξα σε cmd την εντολή chcp και μου εμφανίζει 437  :-(

437? Αυτή δεν έχει πλήρη υποστήριξη ελληνικών χαρακτήρων.

 

Κανονικά όμως, αν γυρίζεις το codepage μέσα από το πρόγραμμά σου (με: system( "chcp XXX" ); ) στην κωδικοσελίδα που βάζεις και στο -fexec-charset δεν θα έπρεπε να είχες πρόβλημα (προφανώς όμως σε μια κωδικοσελίδα που να υποστηρίζει ελληνικά... και προφανώς να τα υποστηρίζει και η γραμματοσειρά που έχεις στην κονσόλα των Windows).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Λοιπόν, άλλαξα τελικά την κωδικοσελίδα από 437 σε 747.

Στο codeblocks ,άλλαξα σε UTF-8

Στον compiler δεν έχω βάλει καμία εντολή.

Στην main ,πρώτη γραμμή έχω βάλει system("chcp 1253").

Αυτά,

τώρα, άνοιξα το αρχείο κειμένου με το notepad++ και στην κωδικοποίηση αναφέρει : ISO 8859-7.

Έτρεξα μετά με code blocks τον κώδικα, και.... εμφανίζονται σωστά τα ελληνικά από το αρχείο. Μόνο που όταν βάζω μια printf

με ελληνικά μέσα, δεν τα βγάζει σωστά="κινέζικα".

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σε hp laptop, win 8.1 x64 αυθεντικά. Στο command prompt βάζω chcp και μου εμφανίζει: The active code page is 747. 


Δεν την βρήκα πουθενά, την είχε το λαπτοπ λογικά. Εγώ τις ρυθμίσεις άλλαξα :P

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν ξέρω τι είναι αυτή η κωδικοσελίδα. Εγώ δεν την έχω ξανακούσει, κι επίσης δεν υπάρχει στην online τεκμηρίωση της Microsoft.

 

Ίσως είναι κάποια undocumented code-page στα Windows 8.1 (αλλά μου ακούγεται λίγο απίθανο να συμβαίνει κάτι τέτοιο... ίσως τεκμηριώνεται κάπου αλλού, τι να πω).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

τελος πάντων, το λαπτοπ ας το αφήσω καλύτερα. Να διορθώσω το πρόβλημα στο pc θέλω. Αυτό δοκιμάζω, τώρα-τώρα.


Να σε ρωτήσω λίγο, πρέπει η κωδικοποίηση του αρχείου να είναι ίδια με του code blocks?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Φεύγω τώρα (θα επιστρέψω το απόγευμα ή βράδυ) αλλά είναι πικρή ιστορία τα code-pages στα Windows. Δες π.χ. εδώ για την διαφορά μεταξύ OEM και ANSI code-pages.

 

Σε γενικές γραμμές, η το -finput-charset πρέπει να συμφωνεί με την κωδικοποίηση του .c αρχείου, και το -fexec-charset με την ενεργή κωδικοσελίδα της κονσόλας των Windows.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...