Archief - C# character probleem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Mee

Legacy Member
Ik ben een programmake aan het schrijven dat een SQLite database opent, daar een SELECT in doet en de informatie dat daar uitkomt dan ergens wegschrijft in een bestandje.

Nu is het probleem dat in sommige elementen in die database tekens zitten zoals een é en een à. Als die worden ingelezen via de SQLiteDataReader klasse worden die tekens omgezet naar zo'n vraagteken-in-een-ruit of andere vieze tekens.

Is er een oplossing om die tekens toch in zijn originele vorm te behouden?



Heel korte beschrijving van mijn probleem dus ik hoop dat het wat duidelijk is...

MennovdH

Legacy Member
Waarschijnlijk gebruik je de verkeerde karakterset bij het wegschrijven van je gegevens. Zet een breakpoint in je code waar je je gegevens uit je database haalt, en kijk na of alles er daar nog wel goed uitziet. Zo ja, dan weet je zeker dat het probleem ligt bij het wegschrijven, en niet bij het ophalen.
Selecteer in dat geval gewoon een andere karakterset bij het wegschrijven van je data. Als je niet precies weet welke karakterset te selecteren, of hoe je dat doet, post dan het stuk van je code dat schrijft naar het bestand, en het resultaat van een karakter dat misgaat.

Menno

Mee

Legacy Member
Het probleem is er al bij het ophalen van de gegevens.
Dit is de code waar het al foutloopt:
Code:
reader = Cmd.ExecuteReader();

            while (reader.Read())
            {
                if (!(reader.GetValue(0)).Equals(System.DBNull.Value))
                {
                    if(String(reader.GetValue(0))."...continuavano a chiamarlo Trinit�"))
                        MessageBox.Show("Zit lelijk teken in: " + reader.GetString(0));
                    movies.Add(new Movie(@reader.GetString(0), reader.GetDouble(1), "" + reader.GetValue(2), "" + reader.GetValue(3), "" + reader.GetValue(4)));
                }
            }

Die 2de if controleert op de foute naam; normaal gezien moet het "...continuavano a chiamarlo Trinità" zijn (en zo zit het ook in de database als ik die met een externe tool bekijk), niet Trinit�.
Maar ik krijg toch de messagebox te zien, wat er op wijst dat de reader al verkeerde info inleest.

ginanity

Legacy Member
Ik heb ooit soortgelijke problemen gehad (bij sockets) en heb dat toen opgelost door de tekst te converteren naar Unicode. In de System.Text namespace zitten verschillende klassen die specifieke tekensconversies uitvoeren (ASCIIEncoding, UnicodeEncoding).

MennovdH

Legacy Member
Mee,

Ik zou eens kijken naar de charcode van de vierkantjes die je in je strings krijgt. Het is mogelijk dat je deze, zoals ginanity zegt, kan converteren, eerst naar bytes, en dan van je bytes naar de correcte karakterset.
Ik heb echter even rondgekeken, en ben tegen volgende thread aangelopen: Reading umlaute from database in C# - System.Data.SQLite . Deze doet me vermoeden dat de provider die je gebruikt naar je database de niet-herkende karakters al heeft vervangen door het standaard #65533, en dat je die informatie dus niet kan terugconverteren. Kijk eens rond of je een andere class vindt om te verbinden naar je database, die je wel een karakterset laat instellen.

Menno
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan