Jag kan se fem potentiella områden för problem:
-
Hur får du egentligen in texten i din .NET-applikation? Om den är hårdkodad i en strängliteral, är du säker på att kompilatorn antar rätt kodning för din källfil?
-
Det kan vara problem med hur du skickar det till databasen.
-
Det kan vara problem med hur det lagras i databasen.
-
Det kan vara problem med hur du hämtar den i databasen.
-
Det kan vara problem med hur du visar det igen efteråt.
Nu låter områden 2-4 som att de är mindre sannolika att vara ett problem än 1 och 5. Hur visar du texten efteråt? Hämtar du verkligen det från databasen i .NET, eller använder du Toad eller något liknande för att försöka se det?
Om du skriver ut det igen från .NET föreslår jag att du hoppar över databasen helt - om du bara visar själva strängen, vad ser du då?
Jag har en artikel som du kan ha nytta av om felsökning av Unicode-problem. Koncentrera dig särskilt på varje plats där kodningen kunde gå fel, och se till att när du "visar" en sträng så dumpar du de exakta Unicode-tecknen (som heltal) så att du kan kontrollera dessa istället för bara vad ditt nuvarande teckensnitt vill visa.
EDIT:Okej, så databasen är inblandad någonstans i problemet.
Jag starkt föreslår att du tar bort något som ASP och HTML ur ekvationen. Skriv en enkel konsolapp som gör inget men sätt i snöret och hämta det igen. Få den att dumpa de individuella Unicode-tecknen (som heltal) före och efter. Försök sedan att se vad som finns i databasen (t.ex. genom att använda Toad). Jag känner inte till Oracle-funktionerna för att konvertera strängar till sekvenser av individuella Unicode-tecken och sedan konvertera dessa tecken till heltal, men det skulle mycket väl vara nästa sak jag skulle försöka.
EDIT:Ytterligare två förslag (bra att se konsolappen, btw).
-
Ange datatypen för parametern, istället för att bara ge den ett objekt. Till exempel:
command.Parameters.Add (":UnicodeString", OracleType.NVarChar).Value = stringToSave;
-
Överväg att använda Oracles egen drivrutin istället för den som är inbyggd i .NET. Du kanske vill göra detta ändå, eftersom det i allmänhet anses vara snabbare och mer pålitligt, tror jag.