Σε όλες τις περιπτώσεις που εμφανίζεται πρόβλημα με τους χαρακτήρες η αιτία είναι ότι στέλνεις δεδομένα με λάθος κωδικοποίηση. Ο ευκολότερος τρόπος είναι να χρησιμοποιήσεις Unicode οπότε δεν εμφανίζεται κανένα πρόβλημα. Το .NET και τα Windows χρησιμοποιούν παντού Unicode. Τα προβλήματα εμφανίζονται όταν προσπαθείς να μετατρέψεις το Unicode σε κάτι άλλο Αν δοκιμάσεις να μετατρέψεις τα Ελληνικά σε κάποιο codepage το οποίο δεν περιέχει τους ελληνικούς χαρακτήρες θα πάρεις κουτάκια. Το RequestStream.Write(Encoding.ASCII.GetBytes(szpost), 0, szpost.Length) μετατρέπει τα ελληνικά σε ASCII (που δεν γίνεται) με αποτέλεσμα οι ελληνικοί χαρακτήρες να μετατρέπονται σε κουτάκια.
Άλλο σημείο στο οποίο μπορεί να εμφανιστεί πρόβλημα είναι να δοκιμάσεις να αποθηκεύσεις τα δεδομένα σε ASCII (varchar) πεδία στη βάση αντί για Unicode (nvarchar). Και σε αυτή την περίπτωση αν το locale της βάσης δεν υποστηρίζει ελληνικούς χαρακτήρες θα πάρεις κουτάκια.
Τέλος, είναι λάθος να δημιουργείς ένα SQL statement σαν string και να το εκτελείς καθώς είναι αργό, σε αφήνει έκθετο σε SQL Injection attacks αλλά και σκάει αν κάποιος βάλει κάποιο περίεργο χαρακτήρα, π.χ. το ' μέσα στο κείμενο. Αντί γι αυτό φτιάξε ένα DbCommand το οποίο θα δέχεται ως παραμέτρους τα δεδομένα που θέλεις να γράψεις στη βάση.
Έτσι κι αλλιώς, δεν μπορείς να στείλεις ελληνικούς χαρακτήρες σε ένα HTTP request ή σε ένα URL. Γενικά είναι λάθος να στείλεις χύμα κείμενο στο request γιατί μπορεί να περιέχει περίεργους χαρακτήρες (π.χ. \, /, & ). Για να στείλεις χύμα κείμενο πρέπει να το κωδικοποιήσεις με το κατάλληλο encoding και να το αποκωδικοποιήσεις στην άλλη πλευρά. Αυτό γίνεται πανεύκολα με τις HttpServerUtility.UrlEncode/UrlDecode στην πλευρά του server και HttpUtility.UrlEncode/Decode στην πλευρά του client.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos