Autor Beitrag
renekr
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win 2000 ,Win XP, Win 7 64Bit
Delphi 2007 Ent,VBA,C#,ASP.net,VS2009Pro,VS2010 RC
BeitragVerfasst: Do 08.04.10 10:23 
Hi,
Ich habe ein Problem und finde leider keine Funktionierende Lösung.

Ich habe eine Firebird Datenbank wo ein UTF8 Text drin steht welcehn ich rausholen muss und normal anzeigen soll als Iso Code.
Beispiel :
é = é
è=è
groÃ? = groß
velký=velký

Das sind hauptsächlich Übersetzungen von Artikel in Tschechisch und Französisch.

ich habe folgende Funktion benutzt.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
   public static string GenerateTextfromUTF8(string utf8Text)
        {
            System.Text.Encoding utf_8 = System.Text.Encoding.UTF8;
            System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();
            Byte[] BytesMessage = UTF8.GetBytes(utf8Text);
            string s_unicode2 = UTF8.GetString(BytesMessage, 0, BytesMessage.Length);
            return s_unicode2;
        }

und noch

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  string sutf8 = textBox1.Text;
            Encoding iso = Encoding.GetEncoding("ISO-8859-1");
            Encoding utf8 = Encoding.UTF8;

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

            textBox2.Text = msg;


Ich bekomme immer den UTF8 Code Text als Ausgabe.
Kann mir ev. jemand weiter helfen ?

Vielen Dank
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 08.04.10 11:36 
Dir ist schon bewusst, dass .NET-Strings und -Controls bereits UTF8 verwenden? Da musst du überhaupt nichts konvertieren, deine Funktion verändert sowieso nichts.

_________________
>λ=
renekr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win 2000 ,Win XP, Win 7 64Bit
Delphi 2007 Ent,VBA,C#,ASP.net,VS2009Pro,VS2010 RC
BeitragVerfasst: Do 08.04.10 12:18 
Hi,
das Problem ist ja das ich von einer Datenbank auslese welche UTF8 hat.
Anzeigen tu ich es nicht direkt in einem Control sondern verarbeite es weiter.(Lokalisierungs Text)

Später muss ich dann den normalen Text wieder in die Datenbank speichern als UTF8 string.

Es gibt so eine Art Admin Tool für Übersetzungen zu pflegen.

Danke
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 08.04.10 17:51 
Und dieser weiterverarbeitende Teil steckt auch in deinem Programm? Dann habe ich immer noch nicht verstanden, warum du es nicht bei UTF8 belässt.

_________________
>λ=
renekr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win 2000 ,Win XP, Win 7 64Bit
Delphi 2007 Ent,VBA,C#,ASP.net,VS2009Pro,VS2010 RC
BeitragVerfasst: Do 08.04.10 18:16 
Hi,
also.

Ich habe eine Firebird DB 1.5 welche UTF8 Code gespeicherten Text aht.
Den muss ich auslesen und in einen SQL Server speichern als normalen Text .

Dann habe ich ein anderes Tool ( Webanwendungen über Webservice) wo ich den Text vom SQL Server auslese und ihn bearbeite,Übersetzen kann.
Den Text speicehre ich dann in SQL und in die Firebird aber FB muss als UTF8 sein.

Also benötige ich doch die Konvertierung UTF8 - Text und Text - UTF8.

Aber falls du eine andere Lösung hast bin ich gerne bereit.
Leider hab i es noch nicht gefudnen wie es geht :)

Danke.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 08.04.10 19:29 
Ich zumindest verstehe unter "normalem Text" am ehesten UTF8 - wenn es um .NET geht, sowieso ;) . Die richtige Kodierung sollten alle ADO.NET-Provider selbst hinbekommen, da gibt es überhaupt nichts zu konvertieren.

_________________
>λ=
renekr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win 2000 ,Win XP, Win 7 64Bit
Delphi 2007 Ent,VBA,C#,ASP.net,VS2009Pro,VS2010 RC
BeitragVerfasst: Fr 09.04.10 07:55 
Hi,
also ich stelle mal etws Code rein , ev. verwende ich auch nur die Falschen Componenten.

Als 1. ist es eine Konsolenanwendung die die Daten von der FB 1.5 holt ( UTF8 Format ) und dann diese Übergibt an einen Webservice ,welcher die dann in die SQL Server DB Speichert als ISO-8859-1, oder kann ich beim auslesen der Übersetzungen ( von der Website - Online shop ) die UTF8 Kodierung automatisch anzeigen in ISO-8859-1.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
 StringBuilder sql = new StringBuilder();
            sql.Append("SELECT * FROM UEBERSETZUNGEN ");
            
            if (!string.IsNullOrEmpty(where))
                sql.Append(where);

            OpenDbConnection();
            OleDbCommand cmd = new OleDbCommand(sql.ToString(), DbConn);
            OleDbDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
             string  uebersetzung  = reader["utf8text"].ToString();//das ist UTF8 Codiert.....
            }
            reader.Close();
          //Übergabe des Strings an den Webservice....Der Webservice macht einen normalen Insert Befehl mit dem Übergebenen String



Vielen Dank für deine Hilfe
Wie gesagt bin für alles offen was mir weiterhelfen könnte in der Richtung.
Ich muss es halt iergendwie hinbekommen das ich die Originalen UTF8 Zeichen in der Website richtig dargestellt bekomme.
Mir ist es quasi egal ob im SQL Server der String in ISO oder UTF8 steht solange er richtig auf der Website angezeigt wird.

Zudem gibt es wie erwähnt ein 2. Tool welches in Silverlight geschrieben wurde und sich diesen Text vom SQL Server rausholt und anzeigt zur Bearbeitung.
Dieser Bearbeitete Text (Übersetzung) soll dann wieder an einen Webservice übergeben werden der diesen String als UTF8 in die FB 1.5 rein schreiben muss mit einem Insert.

Danke
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 09.04.10 13:11 
Ok, und wo ist nun die erste Stelle, an der eine falsche Kodierung auftaucht?

_________________
>λ=
renekr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win 2000 ,Win XP, Win 7 64Bit
Delphi 2007 Ent,VBA,C#,ASP.net,VS2009Pro,VS2010 RC
BeitragVerfasst: Fr 09.04.10 14:08 
Hi,

hier.
ausblenden C#-Quelltext
1:
             string  uebersetzung  = reader["utf8text"].ToString();//das ist UTF8 Codiert.....					


hier bekomme ich den UTF8 String zurück von der FB.
Wenn ich den als UTF8 in SQL speicehre wird er mir in der Webform als UTF8 falsch angezeigt.

Also muss i ihn hier eigentlich Encoden und später wenn i den ISO String Übersetzt habe wieder zurück ins UTF8 Format wandeln und in die FB speicheren !?

Danke
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 09.04.10 15:49 
user profile iconrenekr hat folgendes geschrieben Zum zitierten Posting springen:
hier.
Das heißt, wenn dir die Variable im Debugger anschaust, steht dort schon falsch kodierter Text? Ansonsten wird es wohl erst weiter hinten passieren.

Aber wenn du mit Biegen und Brechen eine Codepage-Kodierung in einen UTF8-String quetschen willst: Das Encoding.Convert in deinem zweiten Code musst du weglassen, dadurch wird er genauso zu einer No-Op wie dein erster.

_________________
>λ=
renekr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win 2000 ,Win XP, Win 7 64Bit
Delphi 2007 Ent,VBA,C#,ASP.net,VS2009Pro,VS2010 RC
BeitragVerfasst: Mo 12.04.10 10:13 
Hi,
Also wenn ich mir die var anschaue im Debugger steht dort genau der UTF8 Text drin welcehr in der der FB Datenbank steht.
Was ja richtig ist aber ich benötige den ISO Text zum weiter speichern in MSSQL.

Zu deinem Vorschlag :
Meinst du so ?
Ich habe als Ausgang da einen UTF8 Text wie zb: éf
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
    string sutf8 = textBox1.Text;
            Encoding iso = Encoding.GetEncoding("ISO-8859-1");
            Encoding utf8 = Encoding.UTF8;

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

            textBox2.Text = msg;


Zudem muss ich ja später iergendwie den ISO Text nach Übersetzung wieder in einen UTF8 Text Codieren damit ich ihn in der FB speichern kann,weil die FB Version ja die Unicode noch nicht handeln kann.

Danke
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 12.04.10 17:17 
Dein letzter Code scheint weitgehend korrekt zu sein. Nur den entscheidenden Schritt hast du auskommentiert.

Später geht es genauso umgekehrt. Wo ist das Problem?

Um es nochmals deutlich zu sagen (Sebastian hat es eigentlich schon klar gesagt): Innerhalb von .NET ist alles Unicode, da ist keine Konvertierung nötig. Wenn die FB-Datenbank Unicode liefert, ist an dieser Stelle ebenfalls keine Konvertierung nötig - weder beim Einlesen noch beim Speichern. Nur wenn an anderer Stelle etwas anderes verwendet wird, muss dafür (und nur dafür) konvertiert werden.

Gruß Jürgen
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 12.04.10 20:44 
user profile iconrenekr hat folgendes geschrieben Zum zitierten Posting springen:
Hi,
Also wenn ich mir die var anschaue im Debugger steht dort genau der UTF8 Text drin welcehr in der der FB Datenbank steht.
Gut, was ist nun die Antwort auf
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Ok, und wo ist nun die erste Stelle, an der eine falsche Kodierung auftaucht?

?

Um es noch einmal deutlicher zu sagen, wie es mir gerade erst auffällt :idea: : Es ist einfach nicht möglich, Latin1-kodierten Text in einen System.String zu bekommen, mein und die anderen Vorschläge sind einfach murks. Und das ist überhaupt kein Problem, weil eine Konvertierung nur an Grenzen wie dem Dateisystem/Streams/... nötig sein kann. Solange es um Strings im Speicher und .NET geht, ist es UTF8, basta ;) .

_________________
>λ=
renekr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win 2000 ,Win XP, Win 7 64Bit
Delphi 2007 Ent,VBA,C#,ASP.net,VS2009Pro,VS2010 RC
BeitragVerfasst: Mo 12.04.10 21:55 
Hi Leute,
Also ich bin euch echt dankbar aber ich bin immer mehr verwirrt.
Der eine sagt ich muss die Stelle auskommentieren dann würde es gehn,du Jürgen sagst das ich genau die Stelle benötige.

Ich weiß echt nicht mehr weiter.

Ich habe es doch genau beschrieben wo mein Problem liegt !
Oder kann es sein das wir ev. aneinander vorbei reden ??

Ich benötige eine Lösung und komme an dieser Stelle leider nicht weiter und hoffe ihr könnt mir weiterhelfen !

Ev. mache ich ja auch was falsch , wie gesagt ich bin offen für alle Vorschläge !

Also nochmal in kurzform.
Ich habe eine FB mit UTB8 gespeichert.
Den muss ich auslesen mit einer Konsolenanwendung und den Text einem Webservice Übergeben der diesen in eine SQL DB speichert.
Dann habe ich eine Silverlight Anwendung welche den Text vom SQL in _ISO ausliest und vom Benutzer Übersetzt wird.
Danach wird dieser Übersetzte Text einem anderem Webservice Übergeben , welcher den ISO Text in genau die 1. FB DB wieder speichern muss, aber als UTF8.

Ich habe 2 Probleme.
1. das auslesen von UTF8 von FB und das insert in den SQL damit ich ihn später richtig ohne die UTF8 Kodierung angezeigt bekomme.
2. Den Insert von einem ISO String in die FB als UTF8.



Vielen Dank
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 12.04.10 23:56 
user profile iconrenekr hat folgendes geschrieben Zum zitierten Posting springen:
Der eine sagt ich muss die Stelle auskommentieren dann würde es gehn,du Jürgen sagst das ich genau die Stelle benötige.
Ich habe doch schon selbst geschrieben, dass mein Vorschlag nicht funktionieren kann. Was du hier von Strings verlangst, _geht_ _einfach_ _nicht_. Und solange du nicht die (wie für gewöhnlich) alles entscheidende Frage beantwortest, ab wo es schief geht, kommen wir nicht mehr weiter.

user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Innerhalb von .NET ist alles Unicode, da ist keine Konvertierung nötig. Wenn die FB-Datenbank Unicode liefert, ist an dieser Stelle ebenfalls keine Konvertierung nötig - weder beim Einlesen noch beim Speichern. Nur wenn an anderer Stelle etwas anderes verwendet wird, muss dafür (und nur dafür) konvertiert werden.
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Und das ist überhaupt kein Problem, weil eine Konvertierung nur an Grenzen wie dem Dateisystem/Streams/... nötig sein kann.
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Ok, und wo ist nun die erste Stelle, an der eine falsche Kodierung auftaucht?

_________________
>λ=
renekr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win 2000 ,Win XP, Win 7 64Bit
Delphi 2007 Ent,VBA,C#,ASP.net,VS2009Pro,VS2010 RC
BeitragVerfasst: Di 13.04.10 07:45 
Hi Sebastian,

Also die erste Stelle wo es schief geht ist die hier.
Da hole ich den String aus der FB heraus und Übergebe Sie danach dem Webservice welcher Sie in die MS SQL speichert.

Nun wäre meine Frage:
Wenn ich die UTF8 kodierung beibehalten kann, dann kann ich die ja 1:1 von der FB in die MS SQL speichern als UTF8 !
Aber wie bekomme ich dann die Richtige Formatierung in der Website hin das diese mir kein UTF8 auf den Labels anzeigt ?
Das ist die 1. der 2 Entscheidenen Fragen .

Vielen Dank für eure Geduld.

user profile iconrenekr hat folgendes geschrieben Zum zitierten Posting springen:
Hi,

hier.
ausblenden C#-Quelltext
1:
             string  uebersetzung  = reader["utf8text"].ToString();//das ist UTF8 Codiert.....					


Danke



In der Website tue ich die Strings in einer Datalist anzeigen:
ausblenden Quelltext
1:
 Text='<%# DataBinder.Eval (Container.DataItem, "UTF8TextvonMSSQL") %>'					
renekr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win 2000 ,Win XP, Win 7 64Bit
Delphi 2007 Ent,VBA,C#,ASP.net,VS2009Pro,VS2010 RC
BeitragVerfasst: Di 13.04.10 07:53 
Hi
So sieht das Label dann im Web aus:
Wenn der UTF8 Text von der FB 1:1 in die MSSQL gespeichert wird.
siehe anhang
Einloggen, um Attachments anzusehen!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 13.04.10 21:32 
user profile iconrenekr hat folgendes geschrieben Zum zitierten Posting springen:
Also die erste Stelle wo es schief geht ist die hier.
Da hole ich den String aus der FB heraus und Übergebe Sie danach dem Webservice welcher Sie in die MS SQL speichert.
Bitte was? Zu dieser Stelle hast du doch geschrieben:
user profile iconrenekr hat folgendes geschrieben Zum zitierten Posting springen:
Also wenn ich mir die var anschaue im Debugger steht dort genau der UTF8 Text drin welcehr in der der FB Datenbank steht.
Was ja richtig ist

Das interpretiere ich so, dass dort noch ein "é" auftaucht und kein Geschwurbsel. Ich will aber endlich wissen, ab welcher Stelle genau das nicht mehr der Fall ist.

user profile iconrenekr hat folgendes geschrieben Zum zitierten Posting springen:
Vielen Dank für eure Geduld.
Sorry, aber die ist bei mir zumindest bald weg ;) .

/edit: Um das mit der Webseite klar zu stellen: ASP.NET verschickt standardmäßig UTF8-Webseiten, das sollte also kein Problem ergeben. Hast du das abgeändert, sollte es trotzdem die Ausgabe der <% %>-Blöcke entsprechend enkodieren.

_________________
>λ=
renekr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41

Win 2000 ,Win XP, Win 7 64Bit
Delphi 2007 Ent,VBA,C#,ASP.net,VS2009Pro,VS2010 RC
BeitragVerfasst: Mi 14.04.10 07:50 
Hi,
Also die erste Stelle wo ich per reader die Daten aus der Abfrage von der FB hole steht natürlich der Wert ( é) anstelle den é, weil das ja auch soo in der FB DB steht.
Das é muss ich aber als é in die SQL speichern, oder ich muss in der Website es so hinbekommen das er den é Text in dem Label als é anzeigt.

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:

Das interpretiere ich so, dass dort noch ein "é" auftaucht und kein Geschwurbsel. Ich will aber endlich wissen, ab welcher Stelle genau das nicht mehr der Fall ist.


Danke.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 14.04.10 09:31 
user profile iconrenekr hat folgendes geschrieben Zum zitierten Posting springen:
Also die erste Stelle wo ich per reader die Daten aus der Abfrage von der FB hole steht natürlich der Wert ( é) anstelle den é, weil das ja auch soo in der FB DB steht.

Das kommt mir wie ein Widerspruch vor zu allem, was du bisher gesagt hast.

é ist die UTF8-Darstellung dort, wo Unicode gelesen und geschrieben wird. é o.a. ist die Darstellung eines Unicode-Zeichens dort, wo Unicode nicht bekannt ist.

Wenn du behauptest, dass die FB-DB UTF8 speichert, dann muss sie das é auch als é anzeigen. Die einzige Erklärung, die mir für eine solche Abweichung einfällt, ist, dass du mit IBExpert Personal arbeitest, und die zeigt kein Unicode an. Oder du hast ein é mit IBExpert PE gespeichert; dann steht es auch in einer UTF8-Datenbank nicht korrekt drin.

Wir müssen also noch genauer nachfragen (aber Sebastian geht ja zurecht langsam die Geduld aus), und du solltest endlich ganz exakt sagen:
1. Wie ist ein bestimmtes Zeichen in die DB gekommen? (Befehlsfolge, Arbeitsablauf, Codierung)
2. Wie holst du einen String aus der DB?
3. Wo lässt du ihn dir anzeigen? Wie sieht dort ein bestimmtes Zeichen aus?
4. Wo und wie überträgst du den String weiter? Wie sieht ein bestimmtes Zeichen vorher und nachher aus?
Und so weiter...

Auf ein Neues! Jürgen