Ονειρολογίτης Δημοσ. 19 Ιουνίου 2016 Δημοσ. 19 Ιουνίου 2016 Γεια σας ! Γραφω ενα προγραμμα σε C#... το οποιο ενα απο τα πραματα που κανει ειναι ανεβαζει καποια string πληροφοριες. Το προβλημα ειναι οτι τα string που περιεχουν Ελληνικους χαρακτηρες τα βγαζει αλαμπουρνεζικα. Για να κανω το transform δοκιμασα αυτο το κωδικα: string message = "ΕΛΛΑΣ" byte[] convertedMessageToUnicode = Encoding.Unicode.GetBytes(message); string MyString = Encoding.Unicode.GetString(convertedMessageToUnicode) Με αυτο τον κωδικα προσπαθησα να το κανω μετατροπη σε Unicode. Δοκιμασα ολες τις κωδικοποιησεις αλλα τιποτα.... Καμια ιδεα ???
defacer Δημοσ. 19 Ιουνίου 2016 Δημοσ. 19 Ιουνίου 2016 Αυτό που δίνεις παραπάνω θα έπρεπε αν καταλαβαίνεις τι κάνει να είναι προφανές πως δεν έχει απολύτως κανένα αποτέλεσμα (well, τουλάχιστον κανένα επιθυμητό αποτέλεσμα). Επομένως δεν είναι παράλογο να υποθέσει κανείς ότι προβληματίζεσαι ακόμα επειδή δεν καταλαβαίνεις τι γίνεται ούτε τι αποτέλεσμα έχουν αυτά που κάνεις, οπότε η μόνη περίπτωση να λυθεί το πρόβλημα είναι με κωλοφαρδία. Η συμβουλή μου λοιπόν είναι να καταλάβεις πρώτα τι συμβαίνει και μετά να προσπαθήσεις να λύσεις το πρόβλημα. Θα ήθελα να είμαι πιο συγκεκριμένος αλλά βασικά δεν υπάρχει σχεδόν καμία πληροφορία στο μήνυμά σου: "ανεβάζει κάποια string" -- πώς; πού; σε ποιόν; τι περιμένει να λάβει ο αυτός από το πρόγραμμα; "τα βγάζει αλαμπουρνέζικα" -- ποιός; πώς; τα αλαμπουρνέζικα είναι άραγε αποτέλεσμα της λάθος εισαγωγής ή λάθος εμφάνισης δεδομένων; παράδειγμα του τι στέλνεις και τι αλαμπουρνέζικα βλέπεις τελικά; "δοκίμασα όλες τις κωδικοποιήσεις" -- αποκλείεται, αλλά και να το είχες κάνει η λέξη "δοκίμασα" δε λέει πολλά ειδικά όταν συνοδεύει το παράδειγμα που προφανώς δεν κάνει τίποτα
coffeex Δημοσ. 19 Ιουνίου 2016 Δημοσ. 19 Ιουνίου 2016 Από αυτά που έγραψες δεν κατάλαβα τίποτα... αλλά έχω την εντύπωση ότι θες, μάλλον, το παρακάτω: Console.OutputEncoding = Encoding.UTF8;
Ονειρολογίτης Δημοσ. 19 Ιουνίου 2016 Μέλος Δημοσ. 19 Ιουνίου 2016 (επεξεργασμένο) Θα ειμαι απολυτως ειλικρινης. Εχω αρχισει(κι εχω σχεδον τελειωσει τα βασικα) ενα IRC(ειναι για την εμπειρια... οχι κατι εμπορικο..). Το προγραμματιζω απο το πρωι εχοντας κανει μονο ενα διαλειμα, κι ενα δευτερο τωρα. Οποτε δεν μπορω να πω οτι το κεφαλι μου ειναι και ιδιαιτερα οκ.... Το συγκεκριμενο κωδικα τον βρηκα online(η ιστοσελιδα λεγοταν codeproject... η κατι τετοιο) γιατι πραγματικα... δεν ειχα το κουραγιο να δω τι-πο-τα.... και τελικα αποδεικνυεται για μια ακομα φορα.. οτι αν τον κωδικα δεν τον εχεις γραψει εσυ... γινετε μια μανταρα και μιση. Τελος παντων. ΓΙα να απαντησω στις ερωτησεις. Defacer... εφοσον μου λες οτι αυτο που παω να κανω δεν εχει νοημα.... τοτε δεν απανταω στο τι κωδικοποιησεις δοκιμασα. Παμε παρακατω. Τα συγκεκριμενα string τα ανεβαζει(το προγραμμα) σε mySQL DB εκτελωντας ενα insert query. Οσο για τα αλαμπουρνεζικα... το output της λεξης ΕΛΛΑΣ ΠΧ χωρις να βαλω τον χαζο-κωδικα που ανεβασα στο αρχικο ποστ.. ειναι αυτο: ????S. Θα δοκιμασω αυριο με καθαρο κεφαλι... και θα σου πω Επεξ/σία 20 Ιουνίου 2016 από Ονειρολογίτης
defacer Δημοσ. 19 Ιουνίου 2016 Δημοσ. 19 Ιουνίου 2016 Δώσε εκείνο το σημείο του κώδικα που κάνει το query της αποθήκευσης, καθώς και τη δομή του πίνακα που αποθηκεύεις ("SHOW CREATE TABLE xyz"). Αυτό που έχεις παραπάνω που λέω δεν έχει νόημα, βασικά μετατρέπει τα χιλιόμετρα σε χιλιόμετρα και μετά πάλι πίσω σε χιλιόμετρα. Γι' αυτό δεν έχει νόημα.
παπι Δημοσ. 20 Ιουνίου 2016 Δημοσ. 20 Ιουνίου 2016 Γενικα μεσα στο προγραμμα δουλευεις με unicode. Οτι βγαινει εξω (πχ db) βγαινει ως utf8, οπως και οτι μπαινει θα ειναι utf8.
Ονειρολογίτης Δημοσ. 20 Ιουνίου 2016 Μέλος Δημοσ. 20 Ιουνίου 2016 Δώσε εκείνο το σημείο του κώδικα που κάνει το query της αποθήκευσης, καθώς και τη δομή του πίνακα που αποθηκεύεις ("SHOW CREATE TABLE xyz"). Αυτό που έχεις παραπάνω που λέω δεν έχει νόημα, βασικά μετατρέπει τα χιλιόμετρα σε χιλιόμετρα και μετά πάλι πίσω σε χιλιόμετρα. Γι' αυτό δεν έχει νόημα. http://goo.gl/fOvPLJ http://goo.gl/4OY1jp http://goo.gl/nG0jjC Στη φωτο(την πρωτη) δεν εχει το mcon.Open(), κι αυτο γιατι ειναι πολυ ποιο πανω στον κωδικα.
παπι Δημοσ. 20 Ιουνίου 2016 Δημοσ. 20 Ιουνίου 2016 Index ως double? Αμαρτια σκετη το query. Αρα εχεις το προγραμμα να δουλευει με unicode και η db με utf8. Στελνεις τα strings ως utf8? Οταν τα παιρνεις, τα μετατρεπεις σε unicode? Προφανως και δεν κανεις τιποτα απο τα παραπανω.
Ονειρολογίτης Δημοσ. 20 Ιουνίου 2016 Μέλος Δημοσ. 20 Ιουνίου 2016 Ενταξει παιδια. Καθισα διαβασα καποια πραματα και καταλαβα τι παιζει σχετικα με τις κωδικοποιησεις και το ελυσα το προβλημα. Βλακωδες το λαθος απο μερους μου. Παπι... το id δεν ηταν να γινει id βασικα. Ηταν να βαλω τιμες double.... και μετα το βαφτισα εγω id. Θα το διορθωσω ASAP. Ναι εχεις δικιο. Η βαση δεδομενων δουλευει με utf8 κι εγω εστελνα οτι να ναι. Τωρα το διορθωσα. Στελνω ως UTF8 και δουλευει like a charm. Εχεις να προτεινεις κατι αλλο σχετικα με το query που ειπες ? Με ενδιαφερει να μαθω...
defacer Δημοσ. 20 Ιουνίου 2016 Δημοσ. 20 Ιουνίου 2016 Καλό το EF αλλά ίσως λίγο overkill για τέτοια απλά πράγματα, και σου κρύβει και τα πάντα. Νομίζω έχει νόημα να μάθεις τα βασικά πρώτα σε πιο low level. Το πρόβλημα που είχες δε θα είχε εμφανιστεί καν αν έκανες το query στη βάση σωστά, όπου σωστά = query με παραμέτρους. Αυτή τη στιγμή έχεις ένα sql injection με το οποίο μπορεί οποιοσδήποτε να στείλει μηνύματα που φαίνεται ότι προέρχονται από άλλο χρήστη. Αυτό που θα έπρεπε να κάνεις είναι command = "INSERT .... (message, owner) VALUES(@message, @owner)"; mcd = new MySqlCommand(command, mcon); mcd.Parameters.AddWithValue("@message", message); mcd.Parameters.AddWithValue("@owner", owner); mcd.ExecuteNonQuery(); Υπάρχουν κι άλλα πράγματα εδώ όπως ότι έβγαλα το id (γιατί να το δίνεις ποτέ???), τα ονόματα των objects κλπ αλλά το βασικό είναι να κάνεις πάντα parameterized queries. Πάντα.
Ονειρολογίτης Δημοσ. 20 Ιουνίου 2016 Μέλος Δημοσ. 20 Ιουνίου 2016 Καλό το EF αλλά ίσως λίγο overkill για τέτοια απλά πράγματα, και σου κρύβει και τα πάντα. Νομίζω έχει νόημα να μάθεις τα βασικά πρώτα σε πιο low level. Το πρόβλημα που είχες δε θα είχε εμφανιστεί καν αν έκανες το query στη βάση σωστά, όπου σωστά = query με παραμέτρους. Αυτή τη στιγμή έχεις ένα sql injection με το οποίο μπορεί οποιοσδήποτε να στείλει μηνύματα που φαίνεται ότι προέρχονται από άλλο χρήστη. Αυτό που θα έπρεπε να κάνεις είναι command = "INSERT .... (message, owner) VALUES(@message, @owner)"; mcd = new MySqlCommand(command, mcon); mcd.Parameters.AddWithValue("@message", message); mcd.Parameters.AddWithValue("@owner", owner); mcd.ExecuteNonQuery(); Υπάρχουν κι άλλα πράγματα εδώ όπως ότι έβγαλα το id (γιατί να το δίνεις ποτέ???), τα ονόματα των objects κλπ αλλά το βασικό είναι να κάνεις πάντα parameterized queries. Πάντα. Το ξερω οτι εχω θεμα με την ασφαλεια.. απο την στιγμη που δοκιμασα ολους τους χαρακτηρες και πηρα mySQL error στο '. Μετα την κωδικοποιηση θα κοιτουσα αυτο. Οκ. Το καταλαβα κι ευχαριστω για τις συμβουλες Οσο για την ερωτηση σου... το id ειναι ενας τροπος να ξερω την σειρα των μηνυματων. Αντιθετα με ενα IRC... αυτο το chat που εκανα εγω.. καθε φορα που ξανα μπαινεις στο δωματιο φορτωνει πρωτα ολα τα προηγουμενα μηνυματα. Η αληθεια ειναι οτι μοιαζει περισσοτερο με απομιμηση facebook chat(χωρις τα γραφικα και τα emoticons) παρα με IRC.
παπι Δημοσ. 20 Ιουνίου 2016 Δημοσ. 20 Ιουνίου 2016 Και γιατι δεν βαζεις timestamp; Θα ειναι και πιο απλο εφοσον μπορεις να εκτελεσεις query του τυπου "παρε τα μηνυματα των τελευταιων 10 ημερων"
defacer Δημοσ. 20 Ιουνίου 2016 Δημοσ. 20 Ιουνίου 2016 Αυτό που λέει το παπί. Αν θέλεις τρόπο να ξέρεις τη σειρά των μηνυμάτων βάζεις timestamp ή κάποιο άλλο date/time type. Το id πρέπει να είναι μόνο για αυτό που λέει το όνομά του: να μπορείς να πεις "ποιό μήνυμα; το 45". Βασικά όπου βλέπεις κάτι να λέγεται id, κάνε στον εαυτό σου την ερώτηση: αν το id μπορούσε να πάρει την τιμή "σκουληκομηρμυγκότρυπα", θα δούλευε ακόμα αυτό εδώ; Αν η απάντηση είναι όχι, το αυτό εδώ έχει σχεδιαστεί λάθος.
Papakaliati Δημοσ. 20 Ιουνίου 2016 Δημοσ. 20 Ιουνίου 2016 Αφου θελεις id, που λογικο να θελεις να εχεις, θα το κανεις auto increment προφανως. Απο εκει και περα το messageID που σωζεις ειναι κατι διαφορετικο. Οπως αναφερανε θα βαλεις και ενα timestamp, που και παλι δεν θα το θετεις εσυ, αλλα θα δημιουργειται αυτοματα με καθε νεο entry.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα