Vidím pět potenciálních oblastí pro problémy:
-
Jak vlastně dostáváte text do své .NET aplikace? Pokud je napevno zakódován v řetězcovém literálu, jste si jisti, že kompilátor předpokládá správné kódování pro váš zdrojový soubor?
-
Může být problém ve způsobu, jakým jej posíláte do databáze.
-
Může být problém s tím, jak je uložen v databázi.
-
Může být problém s tím, jak jej načítáte do databáze.
-
Může nastat problém s tím, jak jej poté znovu zobrazíte.
Nyní oblasti 2-4 zní, jako by byly méně pravděpodobné, že budou problémem než 1 a 5. Jak poté zobrazujete text? Vytahujete to skutečně z databáze v .NET, nebo používáte Toad nebo něco podobného, abyste to viděli?
Pokud to píšete znovu z .NET, doporučuji vám úplně přeskočit databázi – pokud zobrazíte pouze samotný řetězec, co vidíte?
Mám článek, který by se vám mohl hodit o ladění problémů s Unicode. Zejména se soustřeďte na každé místo, kde by kódování mohlo pokazíte a ujistěte se, že kdykoli „zobrazíte“ řetězec, vypíšete přesné znaky Unicode (jako celá čísla), abyste je mohli zkontrolovat, nikoli jen to, co vaše aktuální písmo chce zobrazit.
EDIT:Dobře, takže databáze je zapletený někde do problému.
silně navrhněte, abyste z rovnice odstranili něco jako ASP a HTML. Napište jednoduchou konzolovou aplikaci, která nic nedělá ale vložte řetězec a vyzvedněte jej znovu. Nechte jej vypsat jednotlivé znaky Unicode (jako celá čísla) před a za. Pak zkuste zjistit, co je v databázi (např. pomocí Toad). Neznám funkce Oracle pro převod řetězců na sekvence jednotlivých znaků Unicode a poté převod těchto znaků na celá čísla, ale to by byla dost možná další věc, kterou bych zkusil.
EDIT:Další dva návrhy (dobré vidět konzolovou aplikaci, btw).
-
Specifikujte datový typ parametru, místo abyste mu dávali pouze objekt. Například:
command.Parameters.Add (":UnicodeString", OracleType.NVarChar).Value = stringToSave;
-
Zvažte použití vlastního ovladače Oracle namísto ovladače zabudovaného do .NET. Možná to budete chtít udělat i tak, protože se obecně předpokládá, že je rychlejší a spolehlivější.