Widzę pięć potencjalnych obszarów problemów:
-
W jaki sposób faktycznie wprowadzasz tekst do swojej aplikacji .NET? Jeśli jest zakodowany na stałe w literale ciągu, czy jesteś pewien, że kompilator zakłada właściwe kodowanie dla twojego pliku źródłowego?
-
Może wystąpić problem z wysyłaniem go do bazy danych.
-
Może wystąpić problem z przechowywaniem w bazie danych.
-
Może wystąpić problem z pobieraniem danych z bazy danych.
-
Może wystąpić problem z ponownym wyświetlaniem go później.
Teraz obszary 2-4 brzmią tak, jakby były mniej prawdopodobne, że będą stanowić problem niż 1 i 5. W jaki sposób wyświetlasz później tekst? Czy faktycznie pobierasz go z bazy danych w .NET, czy używasz Toad lub czegoś podobnego, aby spróbować to zobaczyć?
Jeśli piszesz go ponownie z .NET, sugeruję, aby całkowicie pominąć bazę danych - jeśli po prostu wyświetlasz sam ciąg, co widzisz?
Mam artykuł, który może Ci się przydać na temat debugowania problemów z Unicode. W szczególności skoncentruj się na każdym miejscu, w którym kodowanie może nie pomylisz się i upewnij się, że za każdym razem, gdy "wyświetlasz" ciąg, wyrzucasz dokładne znaki Unicode (jako liczby całkowite), dzięki czemu możesz je sprawdzić, a nie tylko to, co ma wyświetlać Twoja aktualna czcionka.
EDYCJA:OK, więc baza danych jest zaangażowanych gdzieś w problem.
zdecydowanie zasugeruj usunięcie z równania czegoś takiego jak ASP i HTML. Napisz prostą aplikację konsolową, która nic nie robi ale wstaw ciąg i pobierz go ponownie. Zrób zrzut poszczególnych znaków Unicode (jako liczb całkowitych) przed i po. Następnie spróbuj zobaczyć, co jest w bazie danych (np. za pomocą Toada). Nie znam funkcji Oracle, które konwertują ciągi na sekwencje pojedynczych znaków Unicode, a następnie konwertują te znaki na liczby całkowite, ale prawdopodobnie byłaby to następna rzecz, którą bym spróbował.
EDYCJA:Dwie dodatkowe sugestie (dobrze zobaczyć aplikację konsolową, btw).
-
Określ typ danych dla parametru, zamiast podawać mu tylko obiekt. Na przykład:
command.Parameters.Add (":UnicodeString", OracleType.NVarChar).Value = stringToSave;
-
Rozważ użycie własnego sterownika Oracle zamiast wbudowanego w .NET. I tak możesz chcieć to zrobić, ponieważ ogólnie uważa się, że jest to szybsze i bardziej niezawodne, jak sądzę.