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

 

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

Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

Îåêßíçóå áðü ôï ìÝëïò Ηλίας Κεκάκος. Τελευταία δημοσίευση από το μέλος Ηλίας Κεκάκος στις 06-10-2006, 09:25. Υπάρχουν 20 απαντήσεις.
Σελίδα 1 από 2 (21 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  23-09-2006, 12:05 17099

    Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

    Γειά σας, έχω ένα σοβαρό και επέιγον πρόβλημα. Κάνω selection από μία oracle database σ' ένα datagridview αλλά για να δω τους ελληνικούς χαρακτήρες πρέπει να διαλέξω μία γραμματοσειρα παλιά την HELLASARIAL. Όταν προσπαθώ να σώσω τα δεδομένα σ' ένα ΤΧΤ αρχείο οι ελληνικοί χαρακτήρες φαίνονται κινεζικοι. Δοκίμασα την System.Text.Encoding.GetEncoding(869) με διάφορα νούμερα αλλά τίποτα. Υπάρχει τρόπος να μετατρέψω τους χαρακτήρες την ώρα που τους κάνω select από την Βάση Δεδομένων; 'Η πως μπορώ να μεταφέρω τα δεδομένα σε ΤΧΤ αρχειο που να είναι αναγνώσιμο.

    Η εντολή ENV του UNIX που είναι εγκατεστημένη η ΒΔ oracle δείχνει NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1

     Περίμένω κάποια απάντηση το συντομότερο γιατί πρέπει να παραδώσω το πρόγραμμα την Δευτέρα

    Ευχαριστώ εκ των προτέρων

  •  23-09-2006, 12:13 17101 σε απάντηση της 17099

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

    Από τα λίγα που θυμάμαι από Oracle, το NLS_LAG είναι λάθος... Ψάξε να βρεις τι πρέπει να βάλεις για Ελληνικά
    Vir prudens non contra ventum mingit
  •  23-09-2006, 12:24 17103 σε απάντηση της 17101

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

    Ευχαριστώ για την γρήγορη απάντηση. Ο server ειναι unix solaris με την παράμετρο που έγραψα παραπάνω. Εδώ είναι εγκατεστημένη η ΒΔ της oracle. Δεν θέλω ν' αλλάξω κάτι στον server ή την oracle. Αυτό που ζητάω είναι μου πεί κάποιος με ποιά κωδικοσειρά μπορώ να κάνω την μετατροπή από την VB.NET όταν σώζω τα δεδομένα από το dataset σε ΤΧΤ αρχείο (πχ για DOS είναι η 437), ή αν μπορώ να το κάνω την ώρα που φορτώνω τα δεδομένα στο dataset και πως γίνετε αυτό.

     

      Ευχαριστώ

  •  23-09-2006, 12:46 17104 σε απάντηση της 17101

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

    Δεν έχει τόσο σημασία το NLS_LANG της βάσης όσο του client. Ο Oracle client έχει το "χαρακτηριστικό" να αγνοεί το locale του χρήστη και να χρησιμοποιεί το locale που έχει αποθηκευτεί στο NLS_LANG του χρήστη. Το οποίο δεν είναι απαραίτητα ίδιο με του λειτουργικού. Όταν η Oracle στέλνει κείμενο από το server στον client κάνει τις κατάλληλες μετατροπές από το NLS_LANG του server σε αυτό του client. Αν το NLS_LANG όμως διαφέρει από τη γλώσσα του λειτουργικού, το κείμενο θα εμφανιστεί "κινέζικο". Το ίδιο πρόβλημα θα έχεις αν το κείμενο έχει αποθηκευτεί με διαφορετικό code page από αυτό του server, π.χ. αν αλλάξεις το NLS_LANG του server.

    Αν, για παράδειγμα, στο μηχάνημα σου έχεις NLS_LANG AMERICAN.AMERICA και το locale σου είναι Greek, θα δεις κινέζικα. Για να δεις κανονικά το κείμενο θα πρέπει να αλλάξεις το NLS_LANG στα ελληνικά.

    Ακόμα κι έτσι όμως, όταν αλλάξεις το locale σου, π.χ. επειδή δεν θέλεις να βλέπεις ελληνικά μηνύματα, θα πρέπει να αλλάξεις και το NLS_LANG.

    Μπορείς πάντως να αποφύγεις τα περισσότερα από αυτά τα προβλήματα αν χρησιμοποιήσεις unicode τύπους, όπως τον NVARCHAR αντί για το VARCHAR. Αυτό θα σε απαλλάξει οριστικά από τις μετατροπές του κειμένου. Θα πρέπει πάλι όμως να έχεις τα σωστά NLS_LANG γιατί πέρα από την μετατροπή του κειμένου υπάρχει και η μετατροπή των δεκαδικών αριθμών.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  23-09-2006, 13:42 17105 σε απάντηση της 17104

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

    Σωστά είναι αυτά που λέει ο φίλτατος καναβός, απλά ξέχασε να σου πει ότι και η βάση θα πρέπει να έχει σεταριστεί ώστε να υποστηρίζει το codepage EL8ISO8859P7. ώστε να μπορει να αποθηκεύει σωστά ελληνικά. Η χρήση γίνεται από το NLS_LANG. Μπορείς να έχεις πχ αμερικάνικα locale και το ελληνικό codepage.

    Και αυτό πρέπει να είναι και στη βάση και στον client
    Γιώργος Σακαλής
  •  23-09-2006, 15:44 17107 σε απάντηση της 17099

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

    Σας ευχαριστώ για τις απαντήσεις. Αλλα θεωρήστε ότι όσον αφορά τον server και την Βαση Δεδομένων της oracle που είναι πάνω του δεν πειράζονται με τίποτα. Αυτό που ρωτώ είναι πως μπορώ να φορτώσω τα ελληνικά σ' ενα datagridview και να διαβάζονται χωρίς να χρησιμοποιώ τα HellasArial ή αν χρησιμοποιώ αυτή τη γραμματοσειρά να μεταφέρω τα ελληνικά σ' ένα ΤΧΤ αρχείο.

    Και πάλι ευχαριστώ
  •  23-09-2006, 16:24 17110 σε απάντηση της 17107

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

    Το πρώτο που πρέπει να κάνεις είναι να αλλάξεις το NLS_LANG στον client, όχι την βάση. Αν δεν βάλεις το σωστό NLS_LANG στον client δεν θα βγάλεις εύκολα άκρη. Ο λόγος είναι ότι ο driver της Oracle κάνει μετατροπή από το codepage της βάσης στο codepage του client. Αν το NLS_LANG του client δεν είναι το σωστό, θα αντιστοιχίσει τους ASCII χαρακτήρες που προέρχονται από τη βάση σε λάθος χαρακτήρες στον Client.

    Ίσως, να μπορείς να κάνεις μετατροπή από το codepage του NLS_LANG του client σε Unicode. Τέλος, αν σώζεις στο text αρχείο σε μορφή Unicode, τα ελληνικά θα φαίνονται σωστά, άσχετα από ποιό code page προέρχονται. Φτάνει βέβαια να έχει γίνει σωστά η μετατροπή από το ένα code page στο άλλο.

    Η μόνη ουσιαστική λύση πάντως είναι να θέσεις σωστά το NLS_LANG του client. Διαφορετικά θα πρέπει κάθε φορά να βρίσκεις τί NLS_LANG έχει ο client για να κάνεις μετατροπή από αυτό σε Unicode.

    Αν θες οπωσδήποτε να κάνεις τα conversion με το χέρι, δες το παράδειγμα του MSDN για τηνν Encoding.Convert. Αν αντί για ASCII encoding χρησιμοποιήσεις το iso-8859-1, θα πετύχεις αυτό που θες. Αυτό όμως θα δουλέψει μόνο αν έχεις ορίσει στον client αυτό το encoding. Ως τώρα μας λες ποιό είναι το encoding στο server. Αυτό που πρέπει να κοιτάξεις είναι ποιό είναι το encoding στον client.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  23-09-2006, 23:00 17117 σε απάντηση της 17110

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

    Πάνο σωστό αυτό που λές αλλά δεν αρκεί. πρέπει και η βάση να έχει δημιουργηθεί με coding page που να σου επιτρέπει να αποθηκεύσεις ελληνικούς χαρακτήρες.

    πάντως το πρώτο βήμα είναι να το ορίσεις στο client. Αν το κάνεις στη βάση ουσιαστικά θα πρέπει να τη δημιουργήσεις από την αρχή και δε νομίζω πως είναι αυτό που θέλει ο φίλος μας. Πάντως αν δε πετύχει με τον client θα χρειάζεται πείραγμα και η βάση
    Γιώργος Σακαλής
  •  24-09-2006, 00:28 17118 σε απάντηση της 17117

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

    Παιδιά αν μπορεί να βοηθησει κάποιος με λιγο κώδικα θα του ημουν υπόχρεως. Παρακάτω είναι ο κώδικας που φορτώνω το dataset:

    Imports System.data.OracleClient
    Imports System.Data

    Public Class Deliveries

    Private connectionDemokritus As OracleConnection
    Private dataadapterDeliveries As OracleDataAdapter
    Private datasetDeliveries As DataSet

    Public Sub New(ByVal Shipment As String, ByVal DispatchDate As String)

     connectionDemokritus = New OracleConnection()
     connection.ConnectionString = My.Settings.ConnectionString

     Dim CommandSelectDeliveries As OracleCommand
     Dim SQLSelectDeliveries As String

     SQLSelectDeliveries = "select * from SHIPMENTS" & _
      "where TRIP = '" & Shipment & "' and " & _
      "DATE = to_date('" & DispatchDate & "','dd/mm/yyyy')"

     CommandSelectDeliveries = New OracleCommand(SQLSelectDeliveries, connection)
     dataadapterDeliveries = New OracleDataAdapter

     dataadapterDeliveries.SelectCommand = CommandSelectDeliveries

    End Sub

    Public Function GetDeliveries() As DataSet

     datasetDeliveries = New DataSet
     dataadapterDeliveries.Fill(datasetDeliveries, "SHIPMENTS")
     Return datasetDeliveries

    End Function

    End Class

    Οι ελληνικοί χαρακτήρες στο datagridview δεν είναι σωστοι αλλά τα κατάφερα φορτώνοντας τα HELLASARIAL fonts. Το πρόβλημα είναι στον παρακάτω κώδικα:



    Dim StreamWriterTXT As New StreamWriter("c:\Deliveries.txt")

    Dim Values As New System.Text.StringBuilder

    For Each DataRow As DataRow In Dataset.Tables(0).Rows
     For Column As Integer = 0 To Dataset.Tables(0).Columns.Count - 1
      Values.Append(DataRow(Column).ToString & "|")
     Next

     Values.Remove(Values.Length - 1, 1)
     StreamWriterTXT.WriteLine(Values.ToString)
     StreamWriterTXT.WriteLine()
     Values.Remove(0, Values.Length)
    Next

    StreamWriterTXT.Flush()
    StreamWriterTXT.Close()

      Ψάχνω να βρώ κάτι στο internet αλλά δεν μπορώ. Αν καταλαβαίνω καλά το πρόβλημα είναι στο character set. Τέλος πάντων το ερώτημα παραμένει για το πως μπορούμε και αν μπορούμε να μετατρέψουμε τους χαρακτήρες ετσι ώστε αυτοί να διαβάζονται.

      Ευχαριστώ και πάλι

  •  24-09-2006, 18:29 17121 σε απάντηση της 17118

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

    Δες το παράδειγμα της Encoding.Convert, και δοκίμασε να μετατρέψεις τα string από το Encoding που ορίζεται στο NLS_LANG του client, σε Unicode πριν το αποθηκεύσεις σε αρχείο. Στο παράδειγμα περιγράφεται πως να μετατρέψεις από Unicode σε Ascii. Εσύ θα βάλεις μετατροπή από, π.χ. iso-8859-1 σε Unicode.

    Υποψιάζομαι πάντως ότι ο λόγος που δεν βρίσκεις κάτι στο Internet είναι ότι ψάχνεις για λάθος πράγματα. Αν αλλάξεις το NLS_LANG του client έτσι ώστε να ταιριάζει με το locale του client, δεν θα έχεις πρόβλημα. Δεν σου λέω να αλλάξεις το codepage του server αλλά του client. Διαφορετικά θα πρέπει να κάνεις τη μετατροπή από το code page που έχεις ορίσει στον client σε unicode. Και πάλι, δεν είναι σίγουρο ότι αυτό θα δουλέψει.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  27-09-2006, 10:00 17281 σε απάντηση της 17121

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

      Το πρόβλημα λύθηκε και εντοπίστηκε στον driver oledb της oracle που έρχεται μαζί με το VS2005. Γενικά οι drivers της microsoft που αφορούν την oracle έχουν πρόβλημα με τα ελληνικά για βάσεις δεδομενων που είναι σαν την δική μας. Κατέβασα και τέσταρα τον driver της CoreLab OraDirect.net ο οποίος λειτουργεί θαυμάσια. Θα πρέπει η microsoft να μεριμνήσει γι' αυτό το bug.

     

      Ευχαριστώ για την βοήθεια

  •  27-09-2006, 10:55 17292 σε απάντηση της 17281

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

     ekekakos wrote:
    Το πρόβλημα λύθηκε και εντοπίστηκε στον driver oledb της oracle που έρχεται μαζί με το VS2005. Γενικά οι drivers της microsoft που αφορούν την oracle έχουν πρόβλημα με τα ελληνικά για βάσεις δεδομενων που είναι σαν την δική μας. Κατέβασα και τέσταρα τον driver της CoreLab OraDirect.net ο οποίος λειτουργεί θαυμάσια. Θα πρέπει η microsoft να μεριμνήσει γι' αυτό το bug.

    Τα προβλήματα δεν τα εντοπίζει η Microsoft από μόνη της. Οι προγραμματιστές συμβάλουν σε αυτό, κοινοποιώντας τα bugs στην εταιρία. Καλό θα ήταν να κάνεις μια βόλτα από το Connect της Microsoft και να βάλεις το bug που ανακάλυψες στην λίστα της Microsoft...

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  27-09-2006, 12:32 17309 σε απάντηση της 17281

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

    Οι Oracle drivers της Microsoft χρησιμοποιούν τον Oracle client. Οποιοδήποτε πρόβλημα στη ρύθμιση του Oracle Client έχει σαν αποτέλεσμα τα προβλήματα που ανέφερες. Το ίδιο ισχύει και για τους drivers της ίδιας της Oracle. Το OraDirect.net δεν χρησιμοποιεί τον Oracle Client γι αυτό δεν επηρεάζεται από αυτά τα προβλήματα.

    Ακόμα δεν μας είπες τί ρυθμίσεις είχες στον client. Το έλεγξες? Μήπως δεν είναι bug αλλά κακή ρύθμιση? Αυτό θα πρέπει να το επιβεβαιώσεις πρωτού υποβάλεις bug report, αλλιώς το bug report θα αγνοηθεί.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  28-09-2006, 10:39 17394 σε απάντηση της 17309

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

      Παναγιώτη, μήπως συμβαίνει το αντίθετο; Ο oracle client που είναι εγκατεστημένος σε όλα τα pc της εταιρίας στο registry υπάρχει εγγραφή HLM/SOFTWARE/ORACLE/NLS_LANG/AMERICAN_AMERICA.WE8ISO8859P1

    HLM/SOFTWARE/ORACLE/NLS_LANG/ALL_HOMES/ID0/AMERICAN_AMERICA.WE8ISO8859P1

    HLM/SOFTWARE/ORACLE/NLS_LANG/HOME0/AMERICAN_AMERICA.WE8ISO8859P1

    επίσης αυτήν την παράμετρο την πρόσθεσα και στο enviroment variables

    HLM/SYSTEM/CONTROLSET001/CONTROL/SESSION MANAGER/ENVIRONMENT/AMERICAN_AMERICA.WE8ISO8859P1

    HLM/SYSTEM/CONTROLSET00/CONTROL/SESSION MANAGER/ENVIRONMENT/AMERICAN_AMERICA.WE8ISO8859P1

    HLM/SYSTEM/CONTROLSET/CONTROL/SESSION MANAGER/ENVIRONMENT/AMERICAN_AMERICA.WE8ISO8859P1.

     Επίσης όλα τα προγράμματα που είναι για oracle δεν έχουν πρόβλημα με τους ελληνικούς χαρακτήρες. Προσπάθησα να εγκαταστήσω τον νέο driver της oracle αλλάμου "σκάει" την ώρα της εγκατάστασης, πιστεύω να τα καταφέρω το Σαββατοκύριακο.

      Τώρα αν κάτι δεν κατάλαβα καλά θα ήθελα να το διευκρίνήσουμε.

     

    Σ' ευχαριστώ

  •  28-09-2006, 21:42 17444 σε απάντηση της 17394

    Απ: Πρόβλημα με τους ελληνικούς χαρακτήρες από oracle database

    Είναι ακριβώς αυτό που σου έλεγα να κοιτάξεις από την αρχή. To NLS_LANG που έχεις είναι το Western European. Ο Oracle Client ανακτά το κείμενο σε αυτό το codepage. Όταν όμως τα Windows μετατρέπουν ASCII κείμενο σε Unicode, χρησιμοποιούν το codepage που αντιστοιχεί στό locale του συστήματος. Αν το locale είναι ελληνικό, θα έχεις σαν αποτέλεσμα τα γνωστά "κινέζικα". Καθώς το .NET χρησιμοποιεί αποκλειστικά Unicode, θα έχεις αυτό το πρόβλημα κάθε φορά που το NLS_LANG του client δεν αντιστοιχεί στο locale του μηχανήματος. Σημειωτέον, θα έχεις άλλο ένα πρόβλημα με τη μετατροπή της υποδιαστολής όταν μετατρέπεις numeric τύπους σε string αλλά και με τις ημερομηνίες. Άλλη περίπτωση που θα σου δημιουργήσει πρόβλημα είναι όταν χρήστες με διαφορετικά locales χρησιμοποιούν τον ίδιο υπολογιστή. Βλέπεις, το NLS_LANG ορίζεται για όλο το μηχάνημα, ενώ ο κάθε χρήστης μπορεί να χρησιμοποιήσει το δικό του locale.

    Οι drivers της Core Labs παρακάμπτουν εντελώς τον Oracle Client και μιλάνε απευθείας στον Oracle Server χρησιμοποιώντας το δικό του πρωτόκολλο. Ετσι, αγνοούν εντελώς την τιμή του NLS_LANG και κάνουν τις μετατροπές codepage και υποδιαστολής χρησιμοποιώντας το locale του μηχανήματος, όπως ακριβώς και κάθε εφαρμογή .NET.

    Συνεπώς, δεν υπάρχει κάποιο bug με τους drivers της Microsoft ή της Oracle. Μπορείς βέβαια να αναρωτηθείς τί είδους "feature" είναι αυτό, που απαιτεί εν έτη 2006 να ρυθμίζεις τo codepage, αλλά θα πρέπει να λάβεις υπόψη ότι ο ίδιος Oracle Client που τρέχει σε Windows τρέχει και σε Unix και Linux. Προφανώς η Oracle προτίμησε να μειώσει το κόστος ανάπτυξης και να φτιάξει ένα client για όλα τα λειτουργικά, ακόμα και αν αυτό σήμαινε ότι δημιουργεί προβλήματα στο deployment των εφαρμογών.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Σελίδα 1 από 2 (21 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems