Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Προβλημα με ελληνικά κατά την εισαγωγή σε Access

Îåêßíçóå áðü ôï ìÝëïò lexicon. Τελευταία δημοσίευση από το μέλος lexicon στις 09-12-2009, 09:41. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  08-12-2009, 12:02 55767

    Προβλημα με ελληνικά κατά την εισαγωγή σε Access

    Γεια σας

    Εχω μια σελίδα η οποία δέχετε δεδομένα απο μια εφαμογη με αυτον τον τροπο

    Dim httprequest As HttpWebRequest

    Dim httpresponse As HttpWebResponse

    Dim BodyReader As StreamReader

    Dim BodyText As String = ""

    Dim ResponseStream As Stream

    Dim RequestStream As Stream

    szpost="field1=Ελληνικά&field2=Αγγλικά"

    httprequest = CType(WebRequest.Create(surl), HttpWebRequest)

    httprequest.Method = "POST"

    httprequest.ContentType = "application/x-www-form-urlencoded"

    httprequest.ContentLength = szpost.Length

    RequestStream = httprequest.GetRequestStream()

    RequestStream.Write(Encoding.ASCII.GetBytes(szpost), 0, szpost.Length)

    RequestStream.Close()

    httpresponse = CType(httprequest.GetResponse(), HttpWebResponse)

    ResponseStream = httpresponse.GetResponseStream()

    BodyReader = New StreamReader(ResponseStream)

    BodyText = BodyReader.ReadToEnd

    Τα δεδομένα στέλνονται κανονικά . Απο την άλλη μεριά έχω μια σελίδα η οποία δέχετε τα δεδομένα και τα εισάγει σε μια Access database. Τα windows/access ειναι ολα Ελληνικά.

    FilePath = Server.MapPath("fpdb/webdata.mdb")

    oConn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FilePath & ";Persist Security Info=False")

    oConn.Open()

    InsertNewMessage = "INSERT INTO Table1(MyF1,MyF2) "

    InsertNewMessage = InsertNewMessage & " select "

    InsertNewMessage = InsertNewMessage & "'" & request("field1") & "' as text1, "

    InsertNewMessage = InsertNewMessage & "'" & request("field2")& "' as text2 "

    Dim cmd As OleDbCommand = New OleDbCommand(InsertNewMessage, oConn)

    cmd.ExecuteNonQuery()

    Τα δεδομένα γράφονται στην βάση αλλά τα Ελληνικά γράφονται σαν ρόμβοι

    Εχεις κανείς καμιά ιδέα?

  •  08-12-2009, 12:18 55768 σε απάντηση της 55767

    Απ: Προβλημα με ελληνικά κατά την εισαγωγή σε Access

    Το πρόβλημα θεωρώ ότι είναι σε αυτή τη γραμμή

    RequestStream.Write(Encoding.ASCII.GetBytes(szpost), 0, szpost.Length)

    Γιατί από UTF-8 που είναι το default του .net το κάνεις ASCII??


    Manos
  •  08-12-2009, 12:27 55769 σε απάντηση της 55767

    Απ: Προβλημα με ελληνικά κατά την εισαγωγή σε Access

    Σε όλες τις περιπτώσεις που εμφανίζεται πρόβλημα με τους χαρακτήρες η αιτία είναι ότι στέλνεις δεδομένα με λάθος κωδικοποίηση. Ο ευκολότερος τρόπος είναι να χρησιμοποιήσεις 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
  •  08-12-2009, 12:31 55770 σε απάντηση της 55768

    Απ: Προβλημα με ελληνικά κατά την εισαγωγή σε Access

    Μάνο με πρόλαβες, η αλλαγή του encoding είναι η αρχή του προβλήματος. Το default του .ΝΕΤ όμως δεν είναι το UTF8 (1-4 bytes ανά χαρακτήρα) αλλά το UTF16 (UCS2 για την ακρίβεια, 2 bytes πάντα), κάτι το οποίο δημιουργεί πρόβλημα σε όσους δουλεύουν με MySQL που καταλαβαίνει μόνο UTF8. Αναγκάστικα να βάλω MySQL στο μηχάνημα μου για να το καταλάβω αυτό! Tongue Tied


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  08-12-2009, 13:13 55771 σε απάντηση της 55770

    Απ: Προβλημα με ελληνικά κατά την εισαγωγή σε Access

    Ok ευχαριστώ

    Το άλλαξα σε

    Encoding.Default.GetBytes(szpost)

    και αίζει κανονικά

  •  09-12-2009, 09:41 55787 σε απάντηση της 55769

    Απ: Προβλημα με ελληνικά κατά την εισαγωγή σε Access

    Ευχαριστώ για την απάντηση

    Μπορείς να με βοηθήσεις λίγο γράφοντας μου ένα παράδειγμα πως θα μπορούσα να το κάνω με DbCommand ?

    Ευχαριστώ

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems