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

 

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

Unicode

Îåêßíçóå áðü ôï ìÝëïò dimos.homatas. Τελευταία δημοσίευση από το μέλος dimos.homatas στις 15-02-2011, 13:19. Υπάρχουν 9 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  11-02-2011, 13:01 63216

    Unicode

    Καλησπέρα,

    έχω ένα string με περιεχόμενα πχ "\u03a4\u03ac\u03c3\u03bf\u03c2"

    Εάν πω 

    string s = "\u03a4\u03ac\u03c3\u03bf\u03c2" τότε δουλεύει κανονικά.

    Το πρόβλημα είναι ότι δεν μπορώ να κάνω Initialize με το string καρφωτά, καθ'ότι επιστρέφεται από το webclient και είναι ήδη escaped ( \\ )

    Πως μπορώ να το χειριστώ; Ψάχτηκα με διάφορα encodings κλπ αλλά δεν βρήκα λύση.

    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  11-02-2011, 13:32 63218 σε απάντηση της 63216

    Απ: Unicode

    Αυτό που βρήκα μέχρι τώρα είναι να:

    1) σπάω το string στα επί μέρους unicodes
    2) παίρνω την καθαρή hex αξία
    3) Κάνω parse σε int
    4) Βάζω το int σε ένα char
    5) Βάζω τα chars σε ένα string

    Μανούρα... αφού το VS τα καταλαβαίνει όταν τα γράφω στο περιβάλλον!!! Όλο και κάποιος τρόπος θα υπάρχει, αλλά διαφεύγει

    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  15-02-2011, 11:25 63264 σε απάντηση της 63218

    Απ: Unicode

    Φαντάζομαι ότι και ο editor κάνει τα παραπάνω βήματα που περιέγραψες.
    Μια συναρτησούλα είναι.

                string s = "\\u03a4\\u03ac\\u03c3\\u03bf\\u03c2";
                var sArr = s.Split(new char[] { '\\', 'u' }, StringSplitOptions.RemoveEmptyEntries);
                var c = new char[sArr.Length];
                for(int i = 0; i < sArr.Length; i++)
                    cIdea = (char)int.Parse(sArrIdea, System.Globalization.NumberStyles.HexNumber);
                string s2 = new string(c);
                Console.WriteLine(s2);  //Τάσος 

  •  15-02-2011, 12:19 63265 σε απάντηση της 63264

    Απ: Unicode

    Ευχαριστώ Νίκο. Αυτό έκανα και εγώ, μόνο που την έφτιαξα κατά τέτοιο τρόπο ώστε να επιτρέπει και μικτά string (το FB επιστρέφει και τέτοια).

    Έκανα αυτό:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
            private string GetStringFromUnicode(string s)
            {
                char[] sep = new char[] { '\\' };
                string[] sarray = s.Split(sep, StringSplitOptions.RemoveEmptyEntries);
    
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < sarray.Length; i++)
                {
                    if (sarrayIdea.Substring(0, 2).Equals(@"u0"))
                    {
                        string myhex = sarrayIdea.Substring(0, 5);
                        sarrayIdea = sarrayIdea.Replace(myhex, string.Empty);
                        myhex = myhex.Replace("u", string.Empty);
                        sb.Append((char)int.Parse(myhex, NumberStyles.AllowHexSpecifier));
                    }
                    sb.Append(sarrayIdea);
                }
                return sb.ToString();
    
            }

    Δεν πιάνει την περίπτωση του να ξεκινάει το βασικό string με "u0". Πέρα από αυτό (που δεν με απασχολεί) δουλεύει και για μικτά unicode/non unicode.

    Δεδομένου λοιπόν ότι πρέπει να καλύψω μικτά strings, δεν μπορώ να χρησιμοποιήσω ως seperator το 'u', παρά μόνον το escaped '\'.

    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  15-02-2011, 12:23 63267 σε απάντηση της 63265

    Απ: Unicode

    Αντί για τα indexes βλέπω κάτι λάμπες... μπας και αντιλαμβάνεται τα Idea ως... italic?!?!??!
    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  15-02-2011, 12:24 63268 σε απάντηση της 63267

    Απ: Unicode


    Angel 

    Beer 

    Coffee 

    Drinks 

    Email 

    [f] 

    Gift 

    Cool 

    Idea 


    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  15-02-2011, 12:53 63270 σε απάντηση της 63265

    Απ: Unicode

    Αν το '\' βρίσκεται μπροστά από 'u' τότε πρέπει να υπάρχουν 4 hex αριθμοί αλλιώς είναι compiler error.

    Δεν μπορείς να γράψεις 
     string s = "\uxyzssffdffdgddf";

    Κάνε το sep τύπου string ώστε να κάνει Split μόνο όταν βρίσκονται μαζί (τα '\' και 'u').
    s.Split(new string[] { @"\u" }, StringSplitOptions.RemoveEmptyEntries);

    και ψάξε του 4 πρώτους (hex) αριθμούς του sarray.
  •  15-02-2011, 13:05 63271 σε απάντηση της 63216

    Απ: Unicode

    Το πρόβλημα σου δεν έχει τίποτε να κάνει με το Unicode αλλά το encoding που χρησιμοποιεί η σελίδα σου. Το ASP.NET φροντίζει να κάνει encode τα περίεργα input strings για να περιορίσει τα injection attacks. Αυτό που με παραξενεύει είναι ότι εσύ βλέπεις τα encoded strings και όχι το αρχικό. Μήπως οι χρήστες βάζουν κατευθείαν encode strings ή μήπως χρησιμοποιείς κανένα javascript editor? Κατά κανόνα το \\ εμφανίζεται αν κάνεις javascript encode ένα string ...

    ... μήπως το string προέρχεται από json encoding? Με τόσες ερωτήσεις τελευταία για json, ίσως κάπου να ξέφυγε κάτι που δεν έπρεπε.

    Δεν έχει νόημα να αντικαταστήσεις τα \\ με  κάτι άλλο αν δεν βρεις γιατί έχεις πρόβλημα. Απλά θα ξεπεράσεις αυτό το πρόβλημα και θα πέσεις στο επόμενο.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  15-02-2011, 13:14 63272 σε απάντηση της 63271

    Απ: Unicode

    Παναγιώτη, είναι το Graph API του FB. Εκείνο τα επιστρέφει έτσι.
    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  15-02-2011, 13:19 63273 σε απάντηση της 63272

    Απ: Unicode

    Πληροφοριακά, είναι WinForms εφαρμογή, και χρησιμοποιεί WebClient για να πάρει τα εκάστοτε JSON από το Graph. Αυτό που μου έκανε εντύπωση ήταν και το αρχικό ποστ, ότι αν το δηλώσεις hardcoded το βλέπει (και μάλιστα on the fly), αλλά το string γίνεται escaped (είναι σωστό αυτό;) πριν το δώσει το webclient. Για αυτό και φτάσαμε στα split.



    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems