Ik zie vijf mogelijke probleemgebieden:
-
Hoe krijgt u de tekst eigenlijk in uw .NET-toepassing? Als het hard gecodeerd is in een letterlijke tekenreeks, weet u dan zeker dat de compiler de juiste codering voor uw bronbestand aanneemt?
-
Er kan een probleem zijn met de manier waarop u het naar de database verzendt.
-
Er kan een probleem zijn met de manier waarop het in de database wordt opgeslagen.
-
Er kan een probleem zijn met de manier waarop u het in de database ophaalt.
-
Er kan een probleem zijn met hoe je het daarna weer weergeeft.
Nu klinken de gebieden 2-4 alsof ze minder snel een probleem vormen dan 1 en 5. Hoe geef je de tekst daarna weer? Haal je het daadwerkelijk uit de database in .NET, of gebruik je Toad of iets dergelijks om het te zien?
Als je het opnieuw uit .NET schrijft, raad ik je aan de database helemaal over te slaan - als je alleen de string zelf weergeeft, wat zie je dan?
Ik heb een artikel dat u misschien nuttig vindt over het debuggen van Unicode-problemen. Concentreer u in het bijzonder op elke plaats waar de codering kon fout gaan, en zorg ervoor dat wanneer u een tekenreeks "weergeeft", u de exacte Unicode-tekens (als gehele getallen) weggooit, zodat u deze kunt controleren in plaats van alleen wat uw huidige lettertype wil weergeven.
EDIT:Oké, dus de database is ergens bij het probleem betrokken.
Ik sterk stel voor dat je iets als ASP en HTML uit de vergelijking verwijdert. Schrijf een eenvoudige console-app die niets doet maar steek de string in en haal hem opnieuw op. Laat het de afzonderlijke Unicode-tekens (als gehele getallen) voor en na dumpen. Probeer vervolgens te zien wat er in de database staat (bijvoorbeeld met Toad). Ik ken de Oracle-functies niet om strings om te zetten in reeksen van individuele Unicode-tekens en die tekens vervolgens om te zetten in gehele getallen, maar dat zou heel goed het volgende zijn dat ik zou proberen.
EDIT:Nog twee suggesties (goed om de console-app te zien, trouwens).
-
Geef het gegevenstype voor de parameter op, in plaats van er alleen een object aan te geven. Bijvoorbeeld:
command.Parameters.Add (":UnicodeString", OracleType.NVarChar).Value = stringToSave;
-
Overweeg het gebruik van de eigen driver van Oracle in plaats van de driver die in .NET is ingebouwd. Misschien wil je dit toch doen, omdat het volgens mij over het algemeen sneller en betrouwbaarder is.