[ janis @ 17.06.2008. 15:01 ] @

Imam problem koji izgleda dosta jednostavan ali ...

Iz baze citam neke podatke(u bazi su tipa nvarchar) i recimo dobijem 'Din 255.00'. Hocu da taj string prebazim u byte array i posle opet vratim u string. To je sve okay, medjutim nikako ne mogu ponovo iz byte array-a da dobijem originalni string, uvek dobijem nesto '??? 255.00'. Probao sam sa razlicitim encoding-zima.

e.g.
string str = "Din 255.00";
byte[] arr = Encoding.UTF8.GetBytes(str);
Console.WriteLine(System.Text.UTF8Encoding.UTF8.GetString(arr));
Console.ReadLine(); // vraca ??? 255.00

string str = "Din 255.00";
byte[] arr = Encoding.Unicode.GetBytes(str);
Console.WriteLine(System.Text.UnicodeEncoding.Unicode.GetString(arr));
Console.ReadLine(); // takodje vraca ??? 255.00

Samo da napomenem ne mora string uvek da bude 'Din 255.00', moze da bude '€' ili oznaka za funtu ...
[ sidec @ 17.06.2008. 16:23 ] @
UUU brate, ako ti imash kolonu u bazi koja chuva i valutu i vrijednost, to znachi da si skrenuo desno kod Albukerkija kad si projektovao bazu.
Pogledaj malo po netu neki tutorijal za projektivanje baze i prochitaj malo o normalnim formama.

Trebao bi da imash code tabelu koja ce da sadrzi valute a u glavnoj tabeli da chuvash samo vrijednost(tipa float) i id valute iz code tabele kao FK.

a shto se tiche konkretnog problema mozesh ovako da postupish:

Code:

string str = "Din 255.00";
        string rezultat = "";
        byte[] b = new byte[str.Length];
        // idemo u bajte
        for (int i = 0; i < str.Length; i++)
        {
            b[i] = (byte)str[i];
        }

        //vracamo se u string
        for (int i = 0; i < b.Length; i++)
        {
            rezultat += ((char)b[i]).ToString();
        }
Console.WriteLine(rezultat);
Console.ReadLine();


P.S. samo mi reci zashto uopshte zelish da prebacujesh string u niz bajta, poshto shta god da si sa tim naumio, chini mi se da ima bolje i lakshe reshenje...

poz.
[ DarkMan @ 18.06.2008. 12:09 ] @
Citat:
janis
string str = "Din 255.00";
byte[] arr = Encoding.UTF8.GetBytes(str);
Console.WriteLine(System.Text.UTF8Encoding.UTF8.GetString(arr));
Console.ReadLine();

Ovo kod mene radi OK, lepo ispisuje "Din 255.00".

Citat:

string str = "Din 255.00";
byte[] arr = Encoding.Unicode.GetBytes(str);
Console.WriteLine(System.Text.UnicodeEncoding.Unicode.GetString(arr));
Console.ReadLine();

I ovo kod mene radi OK.

E sad ako stavim € ispisace ? umesto €, ali to je vec ogranicenje konzole, ne moze da ispise unikod karaktere. MessageBox lepo prikaze € znak.
[ mmix @ 18.06.2008. 13:25 ] @
Verovatno je i to Din u stvari cirilicno (ES konvertuje cirilicu u latinicu pri postovanju pa se nije videlo) pa u stvari ne moze konzola da prikaze Din cirilicno iz istih razloga sto ne moze €. Janis, probaj da izlaz iz GetString(byte[]) da prikazes u MessageBoxu kao DarkMan, vidi dal ce da radi kako treba.
[ janis @ 19.06.2008. 14:31 ] @
Citat:
sidec said
UUU brate, ako ti imash kolonu u bazi koja chuva i valutu i vrijednost, to znachi da si skrenuo desno kod Albukerkija kad si projektovao bazu.
Pogledaj malo po netu neki tutorijal za projektivanje baze i prochitaj malo o normalnim formama.


Nije uposte u pitanju money kolona, rec je o polju koji sadrzi html code a din(cirilicom) 255.00 je samo deo tok html koda.

Inace DarkMan i mmix su upravu, sve to radi lepo samo console-a to ne moze da ispise kako treba.