Jak ?, fbreader from BLOB SYB_TYPE 0 with polish sign convert to string?

0

Witam,

Czy ktoś mądry mógłby mi napisać jak mogę odczytać zdanie z polskimi znakami z kolumny z bazy typu BLOB SUB_TYPE 0 ?? i przypisać tą wartość do stringa ?
Od 2 tygodniu z przerwami mecze się z tym i jestem w czarnej ...
Kodowanie w bazie to Windows 1250. Jeśłi pobieram dane z tej kolumny tak:

 SELECT CAST(T.NOTES as VARCHAR(32765)) AS NOTES ... 

to wtedy dzięki temu termin.Details = fbReader["NOTES"].ToString();

widzę znaki ale bez polskich liter. Zamiast polskich liter są kropki. Z tego co wiem pole BLOB SUB_TYPE 0 (taki typ pola umozliwia w bazie firebird dodanie dosc sporej  ilości textu a w c# traktowane jest jak pole typu BYTE)

Np wyjątek który otrzymuję (podczas zapisu) to: Nie można rzutować obiektu Typu System.String na System.Byte[] czyli to pole jest tego typu, zresztą przy zapisie widać co musze zrobić aby poprawnie dodać tam polskie znaki i w ogole jakie kolwiek znaki.


Umiem zapisać zdanie z polskimi znakami do tej kolumny ale nie umiem tego odczytać (dodam że w programie tak zapisane wartości widać prawidłowo) więc chyba zapisuje prawidłowo:
Zapisuję tak:

                          
```csharp
byte[] bytes = Encoding.Unicode.GetBytes(jxsTermin.Details);
                           char[] chars = Encoding.Unicode.GetChars(bytes);
                           byte[] bytes2 = Encoding.GetEncoding("Windows-1250").GetBytes(chars); //UTF-8  //1250


                           cmd.Parameters.Add("@NOTES", FbDbType.Text).Value = bytes2; 

Próbowałem wszystkiego co znalazlem w internecie ale nic ale to nic nie działa.

Dodam że jeśli sobie ustawie stringa z polskimi znakami i próbuje go przekodować na byte potem znowu na stringa to coś takiego:

 
string utf888 = "szczegóły, ążźćółń";
                            Encoding iso = Encoding.GetEncoding("ISO-8859-2");
                            Encoding utf8 = Encoding.UTF8;

                            byte[] utfBytes = utf8.GetBytes(utf888);
                            byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
                            string msg = iso.GetString(isoBytes);

powoduje jego prawidłowe wyświetlenie i przekodowanie. Niestety jak czytam w taki sposób z bazy tego BLOBa to po 1 mam w ogóle problem zeby go podać jak parametr uff888 chyba że dodam na końcu fbReader["NOTES"].ToString(); ale to powoduje już moim zdaniem problem, błąd który skutkuje tym że to powyżej dla takiego przypadku nie działa.

mogę wkleić to co testowałem oczywiście to będzie bałagan ale może wkleje zeby nikt mi tych samych przykładów nie podawał :)

////////var iii = fbReader["NOTES"];

                        ////////Encoding latin2 = Encoding.GetEncoding("Windows-1250");
                        ////////termin.Details = latin2.GetString(latin2.GetBytes(Convert.ToString(fbReader["NOTES"])));
                        
                        ///////////////////////////////////////////////////////////

                        ////////Encoding windows1250 = Encoding.GetEncoding("Windows-1250");

                        //byte[] bytes = Encoding.Unicode.GetBytes(Convert.ToString(fbReader["NOTES"]));
                        //char[] chars = Encoding.Unicode.GetChars(bytes);

                        //byte[] bytes2 = Encoding.GetEncoding("Windows-1250").GetBytes(chars);

                        //string s2 = new string(chars);
                       //string dd = fbReader["NOTES"].ToString();

                       // byte[] buffer = Encoding.GetEncoding(1250).GetBytes(fbReader["NOTES"].ToString());
                       // char[] chars = Encoding.Unicode.GetChars(buffer);
                       // string s2 = new string(chars);
                       // termin.Details = s2;

                       // System.Text.Encoding.GetEncoding(fbreader.TextData.ColumnInfo.CodePage).GetChars(b)
                       // string hh =  System.Text.Encoding.Unicode.GetChars(dd);
                       // string fff = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(Convert.ToString(fbReader["NOTES"])));
                       * *string s3 = new string(fff);
                       // termin.Details = fff;


                        var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(fbReader["NOTES"].ToString());
                        string dfg = Convert.ToBase64String(plainTextBytes);

                        //////////System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();

                        Encoding windows1250 = Encoding.GetEncoding("Windows-1250");
                        //////////Encoding utf8 = Encoding.UTF8;

                        string utf88 = "szczegóły, ążźćółń";

                        byte[] asciiByte = Encoding.Convert(Encoding.UTF8, windows1250, UTF8Encoding.UTF8.GetBytes(utf88));
                        byte[] asciiByte2 = Encoding.Convert(Encoding.UTF8, windows1250, UTF8Encoding.UTF8.GetBytes(fbReader["NOTES"].ToString()));
                        //////////char[] chars = Encoding.Unicode.GetChars(asciiByte);
                        //////////string s2 = new string(chars);

                        //////////Console.WriteLine(System.Text.Encoding.ASCII.GetString(asciiByte));
                        //////////Console.WriteLine(chars);
                        //////////Console.WriteLine(s2); 

                        //string text = "";
                        //byte[] b = (byte[])fbReader["NOTES"];
                        //for (int i = 0; i < b.Length; i++)
                        //{
                        //    text += Convert.ToChar(b[i]);
                        //}

                        //string text2 = 

                        var fffff = Convert.ToString(fbReader["NOTES"]);

                        byte[] bytes = Encoding.Default.GetBytes(fffff);
                        string myString = Encoding.UTF8.GetString(asciiByte);


                        string unicodeString2 = "This string contains the unicode character Pi (\u03a0)";
                         string unicodeString = fbReader["NOTES"].ToString();
                        // Create two different encodings.
                        Encoding ascii = Encoding.ASCII;
                        Encoding unicode = Encoding.Unicode;

                 




                        //dziala bez polskich znakow

                        ////////////byte[] asciiByte = Encoding.Convert(Encoding.UTF8, windows1250, UTF8Encoding.UTF8.GetBytes(utf88));

                        ////////////Encoding enc = Encoding.ASCII;

                       

                        var noc = fbReader["NOTES"];

                        ////////////string str2 = enc.GetString(asciiByte);
                        ////////////Console.WriteLine("Round-trip: {0}", str2.Equals(str2));
                        ////////////if (!str2.Equals(str2))
                        ////////////{
                        ////////////    Console.WriteLine(str2);
                        ////////////    foreach (var ch in str2)
                        ////////////        Console.Write("{0} ", Convert.ToUInt16(ch).ToString("X4"));

                        ////////////    Console.WriteLine();
                        ////////////}
0

Czy naprawdę nikt nie wie o co chodzi ??

1 użytkowników online, w tym zalogowanych: 0, gości: 1